mirror of
https://github.com/Telecominfraproject/oopt-gnpy-web-gui.git
synced 2025-10-30 01:32:21 +00:00
8766 lines
324 KiB
JavaScript
8766 lines
324 KiB
JavaScript
//const { de } = require("../visunminify");
|
|
|
|
//const { type } = require("jquery");
|
|
|
|
var nodes = null;
|
|
var edges = null;
|
|
var network = null;
|
|
// randomly create some nodes and edges
|
|
var data = getScaleFreeNetwork(0);
|
|
var seed = 2;
|
|
var previousId = 0;
|
|
var currentId = 0;
|
|
|
|
var _nodesDB = new TAFFY();
|
|
var _edgeDB = new TAFFY();
|
|
var _insertnodeDB = new TAFFY();
|
|
var container;
|
|
var exportArea;
|
|
var importButton;
|
|
var exportButton;
|
|
var dropdownshape;
|
|
var isService = 0;
|
|
var isCopy = false;
|
|
var isCopyPara = false;
|
|
localStorage.setItem("copyedgeid", "");
|
|
localStorage.setItem("copynodeid", "");
|
|
localStorage.setItem("deletenodeconectededge", "");
|
|
|
|
var optionsJSON = "";
|
|
var roadmJSON = "";
|
|
var ILAJSON = "";
|
|
var amplifierJSON = "";
|
|
var ramanampJSON = "";
|
|
var fusedJSON = "";
|
|
var transceiverJSON = "";
|
|
var dualFiberJSON = "";
|
|
var singleFiberJSON = "";
|
|
var serviceJSON = "";
|
|
var singlePatchJSON = "";
|
|
var dualPatchJSON = "";
|
|
var fiberJSON = "";
|
|
var commonJSON = "";
|
|
|
|
var configData = "";
|
|
var styleData = "";
|
|
var eqpt_config = "";
|
|
|
|
var arrRoadmTypePro = [];
|
|
var _roadmListDB = new TAFFY();
|
|
|
|
var isLocalStorage = false;
|
|
var nodeMode = "";
|
|
var DIR = "";
|
|
var eleroadmtype = "ddlroadmType";
|
|
var elepreamptype = "ddlPreAmpType";
|
|
var eleboostertype = "ddlBoosterType";
|
|
|
|
var currentStepper = "";
|
|
var insertNodeX = 0;
|
|
var insertNodeY = 0;
|
|
|
|
//undo and redo
|
|
//initialize
|
|
let history_list_back = [];
|
|
let history_list_forward = [];
|
|
|
|
var isShow = false;
|
|
var isExpandedView = false;
|
|
|
|
var tSpanLength = "";
|
|
var tType = "";
|
|
var tConnector_in = "";
|
|
var tConnector_out = "";
|
|
var tBandwidth = "";
|
|
var eqptData = "";
|
|
var bullet = "■ ";
|
|
|
|
var nodeSelect = false;
|
|
var tempUndo = [];
|
|
var tempRedo = [];
|
|
|
|
var hiddenEdgeTextOptions = {
|
|
edges: {
|
|
font: {
|
|
// Set the colors to transparent
|
|
color: 'transparent',
|
|
strokeColor: 'transparent'
|
|
}
|
|
},
|
|
nodes: {
|
|
font: {
|
|
// Set the colors to transparent
|
|
color: 'transparent',
|
|
strokeColor: 'transparent'
|
|
}
|
|
},
|
|
};
|
|
var displayEdgeLabels = false;
|
|
|
|
var hiddenNodeTextOptions = {
|
|
nodes: {
|
|
font: {
|
|
// Set the colors to transparent
|
|
color: 'transparent',
|
|
strokeColor: 'transparent'
|
|
}
|
|
}
|
|
};
|
|
var hiddenNodeTextDisplayOptions;
|
|
var displayNodeLabels = false;
|
|
|
|
$(document).ready(function () {
|
|
|
|
$.getJSON("/Data/StyleData.json", function (data) {
|
|
optionsJSON = data.options;
|
|
roadmJSON = data.Roadm;
|
|
hiddenNodeTextDisplayOptions = {
|
|
nodes: {
|
|
font: roadmJSON.font
|
|
}
|
|
};
|
|
ILAJSON = data.ILA;
|
|
amplifierJSON = data.Amplifier;
|
|
ramanampJSON = data.RamanAmplifier;
|
|
fusedJSON = data.Fused;
|
|
transceiverJSON = data.Transceiver;
|
|
dualFiberJSON = data.DualFiber;
|
|
singleFiberJSON = data.SingleFiber;
|
|
serviceJSON = data.Service;
|
|
singlePatchJSON = data.SinglePatch;
|
|
dualPatchJSON = data.DualPatch;
|
|
styleData = data;
|
|
fiberJSON = data.Fiber;
|
|
commonJSON = data.common;
|
|
}).fail(function () {
|
|
console.log("An error has occurred1.");
|
|
});
|
|
|
|
$.getJSON("/Data/ConfigurationData.json", function (data) {
|
|
|
|
configData = data;
|
|
DIR = configData.node.dir;
|
|
//$("*.siteLength").text(' (Max Length ' + configData.node.site_length + ')');
|
|
$("[id='siteLength']").each(function () {
|
|
$(this).text(' (Max Length ' + configData.node.site_length + ')');
|
|
})
|
|
}).fail(function () {
|
|
console.log("An error has occurred2.");
|
|
});
|
|
|
|
$.getJSON("/Data/Equipment_JSON_MOD2.json", function (data) {
|
|
eqpt_config = data;
|
|
load_EqptConfig();
|
|
}).fail(function () {
|
|
console.log("An error has occurred3.");
|
|
});
|
|
|
|
|
|
$("#btncaptureimagenetwork").click(function () {
|
|
if (networkValidation())
|
|
networkPage();
|
|
});
|
|
|
|
$("#btnSaveNetwork, #btnSaveNetworkTop").click(function () {
|
|
|
|
if (networkValidation()) {
|
|
//exportNetwork(true);
|
|
$("*.ES").html("Save As");
|
|
$("#txtFileName").val('');
|
|
$("#staticBackdrop1").modal('show');
|
|
}
|
|
});
|
|
|
|
$("#btnExportPopup").click(function () {
|
|
if (networkValidation()) {
|
|
//topologyValidation();
|
|
$("*.ES").html("Export");
|
|
$("#txtFileName").val('');
|
|
$("#staticBackdrop1").modal('show');
|
|
}
|
|
});
|
|
|
|
$("#btnValidation").click(function () {
|
|
if (networkValidation()) {
|
|
preScale = network.getScale();
|
|
prePosition = network.getViewPosition();
|
|
if (!topologyValidation(true)) {
|
|
showMessage(alertType.Success, 'Successfully validated');
|
|
}
|
|
}
|
|
});
|
|
|
|
$("#exportNetwork").click(function () {
|
|
if (networkValidation()) {
|
|
$("#staticBackdrop1").modal('show');
|
|
}
|
|
});
|
|
|
|
$("#btnExportNetwork").click(function () {
|
|
if (networkValidation() && exportFileValidation()) {
|
|
exportNetwork(false);
|
|
$("#staticBackdrop1").modal('hide');
|
|
}
|
|
});
|
|
$("#errorClose").click(function () {
|
|
|
|
var errNodes = network.body.data.nodes.get({
|
|
filter: function (item) {
|
|
return (item.is_error == true);
|
|
}
|
|
});
|
|
|
|
var errFiber = network.body.data.edges.get({
|
|
filter: function (item) {
|
|
return (item.is_error == true);
|
|
}
|
|
});
|
|
if (errNodes.length > 0 || errFiber.length > 0) {
|
|
removeHighlight();
|
|
network.moveTo({
|
|
position: prePosition,
|
|
scale: preScale,
|
|
});
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
$("#btnAddRoadm").click(function () {
|
|
//if (isExpandedView || isImportJSON) {
|
|
// return;
|
|
//}
|
|
enableDisableNode(1, "Roadm");
|
|
});
|
|
$("#btnAddILA").click(function () {
|
|
|
|
//if (isExpandedView || isImportJSON) {
|
|
// return;
|
|
//}
|
|
enableDisableNode(2, "ILA");
|
|
});
|
|
$("#btnAddAmplifier").click(function () {
|
|
|
|
//if (isExpandedView || isImportJSON) {
|
|
// return;
|
|
//}
|
|
enableDisableNode(5, "amplifier");
|
|
});
|
|
$("#btnAddRamAmp").click(function () {
|
|
|
|
//if (isExpandedView || isImportJSON) {
|
|
// return;
|
|
//}
|
|
enableDisableNode(6, "ramanamp");
|
|
});
|
|
$("#btnAddFused").click(function () {
|
|
|
|
//if (isExpandedView || isImportJSON) {
|
|
// return;
|
|
//}
|
|
enableDisableNode(3, "fused");
|
|
});
|
|
$("#btnAddTransceiver").click(function () {
|
|
|
|
//if (isExpandedView || isImportJSON) {
|
|
// return;
|
|
//}
|
|
enableDisableNode(4, "transceiver");
|
|
});
|
|
$("#btnAddDualFiber").click(function () {
|
|
|
|
//if (isExpandedView || isImportJSON) {
|
|
// return;
|
|
//}
|
|
if (isDualFiberMode == 1) {
|
|
modeHighLight();
|
|
isDualFiberMode = 0;
|
|
}
|
|
else {
|
|
network.addEdgeMode();
|
|
modeHighLight('dualfiber');
|
|
dualFiberMode();
|
|
}
|
|
});
|
|
$("#btnAddSingleFiber").click(function () {
|
|
|
|
//if (isExpandedView || isImportJSON) {
|
|
// return;
|
|
//}
|
|
if (isSingleFiberMode == 1) {
|
|
modeHighLight();
|
|
isSingleFiberMode = 0;
|
|
}
|
|
else {
|
|
network.addEdgeMode();
|
|
modeHighLight('singlefiber');
|
|
singleFiberMode();
|
|
}
|
|
});
|
|
$("#btnServiceActive").click(function () {
|
|
|
|
//if (isExpandedView || isImportJSON) {
|
|
// return;
|
|
//}
|
|
if (networkValidation()) {
|
|
if (isAddService == 1) {
|
|
modeHighLight();
|
|
isAddService = 0;
|
|
}
|
|
else {
|
|
network.addEdgeMode();
|
|
modeHighLight('service');
|
|
addServiceMode();
|
|
}
|
|
}
|
|
});
|
|
$("#btnAddDualPatch").click(function () {
|
|
|
|
//if (isExpandedView || isImportJSON) {
|
|
// return;
|
|
//}
|
|
if (isDualPatchMode == 1) {
|
|
modeHighLight();
|
|
isDualPatchMode = 0;
|
|
}
|
|
else {
|
|
network.addEdgeMode();
|
|
modeHighLight('dualpatch');
|
|
dualPatchMode();
|
|
}
|
|
});
|
|
$("#btnAddSinglePatch").click(function () {
|
|
|
|
//if (isExpandedView || isImportJSON) {
|
|
// return;
|
|
//}
|
|
if (isSinglePatchMode == 1) {
|
|
modeHighLight();
|
|
isSinglePatchMode = 0;
|
|
}
|
|
else {
|
|
network.addEdgeMode();
|
|
modeHighLight('singlepatch');
|
|
singlePatchMode();
|
|
}
|
|
});
|
|
|
|
$("#stepGP").click(function () {
|
|
$("#staticBackdrop4").modal('show');
|
|
var simulationData = JSON.parse(sessionStorage.getItem("simulationParameters"));
|
|
$("#txtFrgMin").val(simulationData["frequency-min"]);
|
|
$("#txtFrqMax").val(simulationData["frequency-max"]);
|
|
$("#txtGridSpac").val(simulationData["spacing"]);
|
|
$("#txtNoOfChannel").val(simulationData["noOfChannel"]);
|
|
$("#txtAgeingMargin").val(simulationData["system-margin"]);
|
|
});
|
|
|
|
$("#btnSaveGP").click(function () {
|
|
saveSimulations($("#txtFrgMin").val(), $("#txtFrqMax").val(), $("#txtGridSpac").val(), $("#txtNoOfChannel").val(), $("#txtAgeingMargin").val());
|
|
$("#staticBackdrop4").modal('hide');
|
|
});
|
|
$("#btnCloseSP, #btnCloseGP").click(function () {
|
|
$("#staticBackdrop4").modal('hide');
|
|
//if (currentStepper) {
|
|
// var stepperID = "#" + currentStepper;
|
|
// $(stepperID).addClass('active');
|
|
// $('#stepGP').removeClass('active');
|
|
// if (currentStepper == "stepCreateTopology")
|
|
// showMenu = 1;
|
|
// else if (currentStepper == "stepAddService")
|
|
// showMenu = 2;
|
|
|
|
//}
|
|
//else
|
|
// $("#stepCreateTopology").click();
|
|
});
|
|
|
|
$('#cbxLength_Based_Loss').change(function () {
|
|
if (this.checked) {
|
|
var span_length = $("#txtSpan_Length").val().trim();
|
|
var spanlen = parseFloat(span_length);
|
|
var loss_coeff = $("#txtLoss_Coefficient").val().trim();
|
|
var lossCoeff = parseFloat(loss_coeff);
|
|
if (isNaN(span_length) || spanlen <= 0 || span_length == "" || isNaN(loss_coeff) || lossCoeff <= 0 || loss_coeff == "") {
|
|
$('#cbxLength_Based_Loss').prop('checked', false);
|
|
showMessage(alertType.Error, "Length based loss requires span length and loss coefficient to be entered");
|
|
|
|
}
|
|
else {
|
|
fiberLengthCal('txtSpan_Length', 'txtLoss_Coefficient', 'txtSpan_Loss');
|
|
|
|
}
|
|
}
|
|
else {
|
|
$("#txtSpan_Loss").val('');
|
|
}
|
|
|
|
});
|
|
$('#cbx_FiberALBL').change(function () {
|
|
if (this.checked) {
|
|
fiberLengthCal('txtFiberASL', 'txtFiberALC', 'txtFiberASpanLoss');
|
|
}
|
|
});
|
|
$('#cbx_FiberBLBL').change(function () {
|
|
if (this.checked) {
|
|
fiberLengthCal('txtFiberBSL', 'txtFiberBLC', 'txtFiberBSpanLoss');
|
|
}
|
|
});
|
|
|
|
$('#cbx_clone').change(function () {
|
|
if (this.checked) {
|
|
$("#ddlFiberBType").val($("#ddlFiberAType").val());
|
|
$("#txtFiberBSL").val($("#txtFiberASL").val());
|
|
$("#txtFiberBLC").val($("#txtFiberALC").val());
|
|
$("#txtFiberBCIN").val($("#txtFiberACIN").val());
|
|
$("#txtFiberBCOUT").val($("#txtFiberACOUT").val());
|
|
$("#txtFiberBSpanLoss").val($("#txtFiberASpanLoss").val());
|
|
}
|
|
});
|
|
|
|
$("#importEqptLink").click(function () {
|
|
|
|
//Swal.fire({
|
|
// icon: 'warning',
|
|
// title: '',
|
|
// text: 'Do you want to override existing data and replace with new data ?',
|
|
// showCancelButton: true,
|
|
// confirmButtonText: "OK",
|
|
// closeOnConfirm: true,
|
|
// confirmButtonColor: '#49508a',
|
|
// width: 375,
|
|
// height: 200,
|
|
// allowOutsideClick: false
|
|
//}).then((result) => {
|
|
// if (result.value) {
|
|
$("#importEqpt").click();
|
|
// }
|
|
//});
|
|
|
|
|
|
});
|
|
function readTextFile(file, callback) {
|
|
var rawFile = new XMLHttpRequest();
|
|
rawFile.overrideMimeType("application/json");
|
|
rawFile.open("GET", file, true);
|
|
rawFile.onreadystatechange = function () {
|
|
if (rawFile.readyState === 4 && rawFile.status == "200") {
|
|
callback(rawFile.responseText);
|
|
}
|
|
vper = vper + 10;
|
|
//console.log(vper + '%');
|
|
document.getElementById("per").innerText = vper + '%';
|
|
}
|
|
rawFile.send(null);
|
|
}
|
|
var vper = 30;
|
|
$("#importEqpt").on('change', function (e) {
|
|
|
|
var file = e.target.files[0];
|
|
if (file) {
|
|
|
|
$('#loader').show();
|
|
var path = (window.URL || window.webkitURL).createObjectURL(file);
|
|
document.getElementById("per").innerText = 20 + '%';
|
|
readTextFile(path, function (text) {
|
|
|
|
if (text) {
|
|
try {
|
|
|
|
document.getElementById("per").innerText = "80%";
|
|
eqptData = JSON.parse(text);
|
|
isEqptFile = true;
|
|
eqpt_config = eqptData;
|
|
load_EqptConfig(true);
|
|
nodeRuleOnImportJSON();
|
|
document.getElementById("per").innerText = "90%";
|
|
edgeStyleOnImportJSON();
|
|
}
|
|
catch (e) {
|
|
showMessage(alertType.Error, "KeyError:'elements', try again");
|
|
hideLoader();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
|
|
//start undo and redo
|
|
redo_css_inactive();
|
|
undo_css_inactive();
|
|
|
|
$("#button_undo").on("click", function () {
|
|
if (tempUndo.length > 0) {
|
|
var tempData = tempUndo[tempUndo.length - 1];
|
|
if (!tempData.isMultiple) {
|
|
var isBreak = false;
|
|
if (tempData.isUpdate) {
|
|
var undoLength = tempUndo.length;
|
|
for (var i = 1; i < undoLength; i++) {
|
|
if (!tempUndo[undoLength - (i + 1)].isMultiple) {
|
|
if (tempUndo[undoLength - 1].id == tempUndo[undoLength - (i + 1)].id) {
|
|
if (tempData.component_type == roadmJSON.component_type) {
|
|
var redoupdate = data.nodes.get(tempUndo[undoLength - (i + 1)].id);
|
|
tempRedo.push(redoupdate);
|
|
data.nodes.update(tempUndo[undoLength - (i + 1)]);
|
|
}
|
|
else {
|
|
var redoupdate = data.edges.get(tempUndo[undoLength - (i + 1)].id);
|
|
tempRedo.push(redoupdate);
|
|
|
|
data.edges.update(tempUndo[undoLength - (i + 1)]);
|
|
nodeValidationInEdge(tempUndo[undoLength - (i + 1)].from, tempUndo[undoLength - (i + 1)].to);
|
|
multipleFiberService(tempUndo[undoLength - (i + 1)].from, tempUndo[undoLength - (i + 1)].to);
|
|
}
|
|
isBreak = true;
|
|
break;
|
|
}
|
|
}
|
|
else {
|
|
for (var j = 0; j < tempUndo[undoLength - (i + 1)].list.length; j++) {
|
|
if (tempUndo[undoLength - 1].id == tempUndo[undoLength - (i + 1)].list[j].id) {
|
|
if (tempData.component_type == roadmJSON.component_type) {
|
|
var redoupdate = data.nodes.get(tempUndo[undoLength - (i + 1)].list[j].id);
|
|
tempRedo.push(redoupdate);
|
|
data.nodes.update(tempUndo[undoLength - (i + 1)].list[j]);
|
|
}
|
|
else {
|
|
var redoupdate = data.edges.get(tempUndo[undoLength - (i + 1)].list[j].id);
|
|
tempRedo.push(redoupdate);
|
|
|
|
data.edges.update(tempUndo[undoLength - (i + 1)].list[j]);
|
|
nodeValidationInEdge(tempUndo[undoLength - (i + 1)].list[j].from, tempUndo[undoLength - (i + 1)].list[j].to);
|
|
multipleFiberService(tempUndo[undoLength - (i + 1)].list[j].from, tempUndo[undoLength - (i + 1)].list[j].to);
|
|
}
|
|
isBreak = true;
|
|
break;
|
|
}
|
|
}
|
|
if (isBreak)
|
|
break;
|
|
}
|
|
}
|
|
if (!isBreak) {
|
|
if (tempData.component_type == roadmJSON.component_type) {
|
|
data.nodes.remove(tempUndo[undoLength - 1]);
|
|
tempRedo.push(tempUndo[undoLength - 1]);
|
|
}
|
|
else {
|
|
data.edges.remove(tempUndo[undoLength - 1]);
|
|
tempRedo.push(tempUndo[undoLength - 1]);
|
|
nodeValidationInEdge(tempUndo[undoLength - 1].from, tempUndo[undoLength - 1].to);
|
|
multipleFiberService(tempUndo[undoLength - 1].from, tempUndo[undoLength - 1].to);
|
|
}
|
|
}
|
|
}
|
|
else if (tempData.isDelete) {
|
|
if (tempData.component_type == roadmJSON.component_type) {
|
|
data.nodes.update(tempData);
|
|
var redoupdate = data.nodes.get(tempData.id);
|
|
tempRedo.push(redoupdate);
|
|
|
|
}
|
|
else {
|
|
data.edges.update(tempData);
|
|
var redoupdate = data.edges.get(tempData.id);
|
|
tempRedo.push(redoupdate);
|
|
nodeValidationInEdge(tempData.from, tempData.to);
|
|
multipleFiberService(tempData.from, tempData.to);
|
|
}
|
|
tempUndo[tempUndo.length - 1].isDelete = false;
|
|
tempUndo[tempUndo.length - 1].isUpdate = true;
|
|
|
|
tempRedo[tempRedo.length - 1].isDelete = true;
|
|
tempRedo[tempRedo.length - 1].isUpdate = false;
|
|
}
|
|
else {
|
|
if (tempData.component_type == roadmJSON.component_type) {
|
|
data.nodes.remove(tempData);
|
|
tempRedo.push(tempData);
|
|
|
|
}
|
|
else {
|
|
data.edges.remove(tempData);
|
|
tempRedo.push(tempData);
|
|
nodeValidationInEdge(tempData.from, tempData.to);
|
|
multipleFiberService(tempData.from, tempData.to);
|
|
}
|
|
}
|
|
tempUndo.pop();
|
|
}
|
|
else {
|
|
if (tempData.isUpdate) {
|
|
for (var i = 0; i < tempData.list.length; i++) {
|
|
for (var j = 0; j < tempData.preList.length; j++) {
|
|
if (tempData.list[i].id == tempData.preList[j].id) {
|
|
data.nodes.update(tempData.preList[j]);
|
|
break;
|
|
}
|
|
}
|
|
//data.nodes.update(tempData.list[i]);
|
|
}
|
|
tempRedo.push(tempData);
|
|
}
|
|
else {
|
|
for (var i = 0; i < tempData.list.length; i++) {
|
|
data.nodes.update(tempData.list[i]);
|
|
}
|
|
|
|
tempRedo.push(tempData);
|
|
}
|
|
tempUndo.pop();
|
|
}
|
|
}
|
|
remove_NodeHighlight();
|
|
|
|
$(btnAddRoadm).removeClass('highlight');
|
|
$(btnAddFused).removeClass('highlight');
|
|
$(btnAddILA).removeClass('highlight');
|
|
$(btnAddAmplifier).removeClass('highlight');
|
|
$(btnAddTransceiver).removeClass('highlight')
|
|
nodeMode = 0;
|
|
enableEdgeIndicator();
|
|
|
|
});
|
|
|
|
$("#button_redo").on("click", function () {
|
|
if (tempRedo.length > 0) {
|
|
var tempData = tempRedo[tempRedo.length - 1];
|
|
|
|
if (!tempData.isMultiple) {
|
|
|
|
if (tempData.isDelete) {
|
|
|
|
tempUndo.push(tempData);
|
|
tempUndo[tempUndo.length - 1].isDelete = true;
|
|
tempUndo[tempUndo.length - 1].isUpdate = false;
|
|
|
|
if (tempData.component_type == roadmJSON.component_type) {
|
|
data.nodes.remove(tempData);
|
|
}
|
|
else {
|
|
data.edges.remove(tempData);
|
|
nodeValidationInEdge(tempData.from, tempData.to);
|
|
multipleFiberService(tempData.from, tempData.to);
|
|
}
|
|
|
|
|
|
tempRedo.pop();
|
|
}
|
|
else {
|
|
tempUndo.push(tempData);
|
|
tempUndo[tempUndo.length - 1].isDelete = false;
|
|
tempUndo[tempUndo.length - 1].isUpdate = true;
|
|
|
|
|
|
if (tempData.component_type == roadmJSON.component_type) {
|
|
data.nodes.update(tempData);
|
|
}
|
|
else {
|
|
data.edges.update(tempData);
|
|
nodeValidationInEdge(tempData.from, tempData.to);
|
|
multipleFiberService(tempData.from, tempData.to);
|
|
}
|
|
|
|
tempRedo.pop();
|
|
}
|
|
}
|
|
else {
|
|
|
|
if (!tempData.isUpdate) {
|
|
for (var i = 0; i < tempData.list.length; i++) {
|
|
data.nodes.remove(tempData.list[i]);
|
|
}
|
|
}
|
|
else {
|
|
for (var i = 0; i < tempData.preList.length; i++) {
|
|
for (var j = 0; j < tempData.list.length; j++) {
|
|
if (tempData.list[j].id == tempData.preList[i].id) {
|
|
data.nodes.update(tempData.list[i]);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
tempUndo.push(tempData);
|
|
tempRedo.pop();
|
|
}
|
|
|
|
}
|
|
|
|
remove_NodeHighlight();
|
|
|
|
$(btnAddRoadm).removeClass('highlight');
|
|
$(btnAddFused).removeClass('highlight');
|
|
$(btnAddILA).removeClass('highlight');
|
|
$(btnAddAmplifier).removeClass('highlight');
|
|
$(btnAddTransceiver).removeClass('highlight')
|
|
nodeMode = 0;
|
|
enableEdgeIndicator();
|
|
|
|
});
|
|
//end undo and redo
|
|
|
|
|
|
//show hide label
|
|
//var testingCount = 5000;
|
|
$("#showHideEle").on("click", function () {
|
|
hideEdgeLabels();
|
|
//if (network.getScale() <= 0.6) {
|
|
// data.nodes.off("*", change_history_back);
|
|
// data.edges.off("*", change_history_back);
|
|
// network.setOptions(hiddenNodeTextOptions);
|
|
//}
|
|
//else if (network.getScale() > 0.6) {
|
|
// data.nodes.off("*", change_history_back);
|
|
// data.edges.off("*", change_history_back);
|
|
// network.setOptions(hiddenNodeTextDisplayOptions);
|
|
//}
|
|
enableEdgeIndicator();
|
|
|
|
if (nodeMode == nodeType.ROADM || nodeMode == nodeType.ILA || nodeMode == nodeType.Attenuator || nodeMode == nodeType.Transceiver || nodeMode == nodeType.Amplifier || nodeMode == nodeType.RamanAmplifier)
|
|
network.addNodeMode();
|
|
});
|
|
|
|
$("#hoverDiv").mouseover(function () {
|
|
$(this).hide();
|
|
});
|
|
$("#stepCreateTopology").click(function () {
|
|
//if (isExpandedView || isImportJSON) {
|
|
// return;
|
|
//}
|
|
$("#edit-topology").show();
|
|
$("#add-service").hide();
|
|
});
|
|
$("#stepAddService").click(function () {
|
|
//if (isExpandedView || isImportJSON) {
|
|
// return;
|
|
//}
|
|
$("#edit-topology").hide();
|
|
$("#add-service").show();
|
|
});
|
|
$("#stepSaveNetwork").click(function () {
|
|
$("#edit-topology").hide();
|
|
$("#add-service").hide();
|
|
});
|
|
$("#ddlNetworkView").change(function () {
|
|
networkView($(this).val());
|
|
});
|
|
$('#btn_CreateNetwork').click(function () {
|
|
$('#divSelection').hide();
|
|
//$('*.vis-zoomIn, *.vis-zoomOut, *.vis-zoomExtends, *.vis-right, *.vis-left, *.vis-up, *.vis-down').css('position', 'fixed');
|
|
//$("#stepGP").click();
|
|
$("#stepCreateTopology").click();
|
|
});
|
|
$('#cbxSingleFiber').change(function () {
|
|
if (this.checked) {
|
|
//alert();
|
|
}
|
|
});
|
|
//$('#txth, #txtw').change(function () {
|
|
// changeWorkAreaWH($(this).attr('id'));
|
|
//});
|
|
|
|
//$('.minus').click(function () {
|
|
// var $input = $(this).parent().find('input');
|
|
// var count = parseInt($input.val()) - 50;
|
|
// count = count < 1 ? 1 : count;
|
|
// $input.val(count);
|
|
// $input.change();
|
|
// return false;
|
|
//});
|
|
//$('.plus').click(function () {
|
|
// var $input = $(this).parent().find('input');
|
|
// $input.val(parseInt($input.val()) + 50);
|
|
// $input.change();
|
|
// return false;
|
|
//});
|
|
});
|
|
|
|
function networkView(view) {
|
|
if (view == topologyView.NE_View)//collapsed view /NE view
|
|
{
|
|
networkMenuHide();
|
|
$("#btnAddSingleFiber").hide();
|
|
$("#btnAddSinglePatch").hide();
|
|
$("#btnAddRamAmp").hide();
|
|
$("#btnAddAmplifier").hide();
|
|
|
|
$("#btnAddILA").show();
|
|
$("#btnAddDualFiber").show();
|
|
//$("#btnAddDualPatch").show();
|
|
//isExpandedView = false;
|
|
|
|
//if (isImportJSON) {
|
|
// $("#edit-topology").hide();
|
|
// $("#add-service").hide();
|
|
//}
|
|
data.nodes.off("*", change_history_back);
|
|
data.edges.off("*", change_history_back);
|
|
expandAndCollapseView(topologyView.NE_View);
|
|
}
|
|
else if (view == topologyView.Functional_View)//expanded view/Functional View
|
|
{
|
|
networkMenuHide();
|
|
$("#btnAddSingleFiber").show();
|
|
$("#btnAddSinglePatch").show();
|
|
$("#btnAddRamAmp").show();
|
|
$("#btnAddAmplifier").show();
|
|
|
|
$("#btnAddILA").hide();
|
|
$("#btnAddDualFiber").hide();
|
|
//$("#btnAddDualPatch").hide();
|
|
|
|
|
|
data.nodes.off("*", change_history_back);
|
|
data.edges.off("*", change_history_back);
|
|
|
|
//if (isImportJSON) {
|
|
//$("#edit-topology").hide();
|
|
//$("#add-service").hide();
|
|
//isExpandedView = true;
|
|
|
|
//disabled temp - increase performance in import json
|
|
//expandAndCollapseView(topologyView.Functional_View);
|
|
|
|
//}
|
|
//else {
|
|
// isExpandedView = false;
|
|
// expandAndCollapseView(false);
|
|
//}
|
|
}
|
|
}
|
|
|
|
function expandAndCollapseView(view) {
|
|
//var edge = network.body.data.edges.get();
|
|
//var node = network.body.data.nodes.get();
|
|
|
|
var FVEdges = network.body.data.edges.get({
|
|
filter: function (item) {
|
|
return (item.view == topologyView.Functional_View);
|
|
}
|
|
});
|
|
|
|
var FVNodes = network.body.data.nodes.get({
|
|
filter: function (item) {
|
|
return (item.view == topologyView.Functional_View);
|
|
}
|
|
});
|
|
|
|
var NVEdges = network.body.data.edges.get({
|
|
filter: function (item) {
|
|
return (item.view == topologyView.NE_View);
|
|
}
|
|
});
|
|
|
|
var NVNodes = network.body.data.nodes.get({
|
|
filter: function (item) {
|
|
return (item.view == topologyView.NE_View);
|
|
}
|
|
});
|
|
|
|
if (view == topologyView.Functional_View) {
|
|
$.each(FVEdges, function (index, item) {
|
|
network.body.data.edges.update({
|
|
id: item.id, hidden: false
|
|
});
|
|
});
|
|
$.each(FVNodes, function (index, item) {
|
|
network.body.data.nodes.update({
|
|
id: item.id, hidden: false
|
|
});
|
|
});
|
|
|
|
$.each(NVEdges, function (index, item) {
|
|
network.body.data.edges.update({
|
|
id: item.id, hidden: true
|
|
});
|
|
});
|
|
$.each(NVNodes, function (index, item) {
|
|
network.body.data.nodes.update({
|
|
id: item.id, hidden: true
|
|
});
|
|
});
|
|
|
|
|
|
}
|
|
else if (view == topologyView.NE_View) {
|
|
$.each(FVEdges, function (index, item) {
|
|
network.body.data.edges.update({
|
|
id: item.id, hidden: true
|
|
});
|
|
});
|
|
$.each(FVNodes, function (index, item) {
|
|
network.body.data.nodes.update({
|
|
id: item.id, hidden: true
|
|
});
|
|
});
|
|
|
|
$.each(NVEdges, function (index, item) {
|
|
network.body.data.edges.update({
|
|
id: item.id, hidden: false
|
|
});
|
|
});
|
|
$.each(NVNodes, function (index, item) {
|
|
network.body.data.nodes.update({
|
|
id: item.id, hidden: false
|
|
});
|
|
});
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
function networkMenuHide() {
|
|
if (currentStepper) {
|
|
if (currentStepper == "stepCreateTopology") {
|
|
showMenu = 1;
|
|
$("#stepCreateTopology").click();
|
|
}
|
|
else if (currentStepper == "stepAddService") {
|
|
showMenu = 2;
|
|
$("#stepAddService").click();
|
|
}
|
|
}
|
|
else {
|
|
showMenu = 1;
|
|
$("#stepCreateTopology").click();
|
|
}
|
|
}
|
|
|
|
function hideEdgeLabels() {
|
|
data.nodes.off("*", change_history_back);
|
|
data.edges.off("*", change_history_back);
|
|
//showHideLabel();
|
|
if (!displayEdgeLabels) {
|
|
// Apply options for hidden edge text
|
|
// This will override the existing options for text color
|
|
// This does not clear other options (e.g. node.color)
|
|
network.setOptions(hiddenEdgeTextOptions);
|
|
//network.setOptions(hiddenNodeTextOptions);
|
|
displayEdgeLabels = true;
|
|
} else {
|
|
// Apply standard options
|
|
options.physics = optionsJSON.physics;
|
|
network.setOptions(options);
|
|
displayEdgeLabels = false;
|
|
}
|
|
enableEdgeIndicator();
|
|
}
|
|
function showHideLabel() {
|
|
if (isShow)
|
|
isShow = false;
|
|
else
|
|
isShow = true;
|
|
|
|
var edge = network.body.data.edges.get();
|
|
var label = "";
|
|
$.each(edge, function (index, item) {
|
|
if (isShow)
|
|
label = item.text;
|
|
else
|
|
label = " ";
|
|
|
|
network.body.data.edges.update({
|
|
id: item.id, label: label
|
|
});
|
|
|
|
});
|
|
|
|
enableEdgeIndicator();
|
|
}
|
|
|
|
|
|
function fiberLengthCal(eleSL, eleLC, eleSpanLoss) {
|
|
var spanLength = "#" + eleSL;
|
|
var lossCoefficient = "#" + eleLC;
|
|
var spanLoss = "#" + eleSpanLoss;
|
|
var span_length = parseFloat($(spanLength).val());
|
|
var loss_coefficient = parseFloat($(lossCoefficient).val());
|
|
$(spanLoss).val(span_length * loss_coefficient);
|
|
}
|
|
|
|
function enableDisableNode(mode, nodename) {
|
|
if (nodeMode == mode) {
|
|
modeHighLight();
|
|
AddNodeMode();
|
|
}
|
|
else {
|
|
modeHighLight(nodename);
|
|
AddNodeMode(mode);
|
|
}
|
|
}
|
|
|
|
//disabled browser right click menu
|
|
$(document).bind("contextmenu", function (e) {
|
|
return false;
|
|
});
|
|
|
|
if (!window.indexedDB) {
|
|
showMessage(alertType.Warning, "Your browser doesn't support a stable version of IndexedDB.");
|
|
}
|
|
|
|
var jsstoreCon = new JsStore.Connection();
|
|
|
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
|
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
|
|
function readdata() {
|
|
return _readdata.apply(this, arguments);
|
|
}
|
|
|
|
function _readdata() {
|
|
_readdata = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
|
|
return regeneratorRuntime.wrap(function _callee$(_context) {
|
|
while (1) {
|
|
switch (_context.prev = _context.next) {
|
|
case 0:
|
|
_context.next = 2;
|
|
return jsstoreCon.select({
|
|
from: 'tbl_network',
|
|
where: {
|
|
id: '1'
|
|
}
|
|
});
|
|
|
|
case 2:
|
|
dat = _context.sent;
|
|
//console.log(dat);
|
|
|
|
case 4:
|
|
case "end":
|
|
return _context.stop();
|
|
}
|
|
}
|
|
}, _callee);
|
|
}));
|
|
return _readdata.apply(this, arguments);
|
|
}
|
|
|
|
function initDb() {
|
|
return _initDb.apply(this, arguments);
|
|
}
|
|
|
|
function _initDb() {
|
|
_initDb = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
|
|
var isDbCreated;
|
|
return regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
while (1) {
|
|
switch (_context2.prev = _context2.next) {
|
|
case 0:
|
|
_context2.next = 2;
|
|
return jsstoreCon.initDb(getDbSchema());
|
|
|
|
case 2:
|
|
isDbCreated = _context2.sent;
|
|
|
|
if (isDbCreated) {
|
|
//console.log('db created');
|
|
} else {
|
|
//console.log('db opened');
|
|
}
|
|
|
|
case 4:
|
|
case "end":
|
|
return _context2.stop();
|
|
}
|
|
}
|
|
}, _callee2);
|
|
}));
|
|
return _initDb.apply(this, arguments);
|
|
}
|
|
|
|
function addNetworData(_x) {
|
|
return _addNetworData.apply(this, arguments);
|
|
}
|
|
|
|
function _addNetworData() {
|
|
_addNetworData = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3(netData) {
|
|
var noOfDataInserted;
|
|
return regeneratorRuntime.wrap(function _callee3$(_context3) {
|
|
while (1) {
|
|
switch (_context3.prev = _context3.next) {
|
|
case 0:
|
|
_context3.prev = 0;
|
|
netmodel = {
|
|
id: "1",
|
|
name: netData
|
|
};
|
|
_context3.next = 4;
|
|
return jsstoreCon.insert({
|
|
into: 'tbl_network',
|
|
values: [netmodel]
|
|
});
|
|
|
|
case 4:
|
|
noOfDataInserted = _context3.sent;
|
|
|
|
if (noOfDataInserted === 1) {
|
|
showMessage(alertType.Success, "Successfully added");
|
|
}
|
|
|
|
_context3.next = 14;
|
|
break;
|
|
|
|
case 8:
|
|
_context3.prev = 8;
|
|
_context3.t0 = _context3["catch"](0);
|
|
_context3.next = 12;
|
|
return jsstoreCon.update({
|
|
in: 'tbl_network',
|
|
set: {
|
|
name: netData
|
|
},
|
|
where: {
|
|
id: "1"
|
|
}
|
|
});
|
|
|
|
case 12:
|
|
noOfDataInserted = _context3.sent;
|
|
|
|
if (noOfDataInserted === 1) {
|
|
showMessage(alertType.Success, "Successfully updated");
|
|
}
|
|
|
|
case 14:
|
|
case "end":
|
|
return _context3.stop();
|
|
}
|
|
}
|
|
}, _callee3, null, [[0, 8]]);
|
|
}));
|
|
return _addNetworData.apply(this, arguments);
|
|
}
|
|
|
|
function deletedata(_x2) {
|
|
return _deletedata.apply(this, arguments);
|
|
}
|
|
|
|
function _deletedata() {
|
|
_deletedata = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4(id) {
|
|
var noOfStudentRemoved;
|
|
return regeneratorRuntime.wrap(function _callee4$(_context4) {
|
|
while (1) {
|
|
switch (_context4.prev = _context4.next) {
|
|
case 0:
|
|
_context4.prev = 0;
|
|
_context4.next = 3;
|
|
return jsstoreCon.remove({
|
|
from: 'tbl_network',
|
|
where: {
|
|
id: id
|
|
}
|
|
});
|
|
|
|
case 3:
|
|
noOfStudentRemoved = _context4.sent;
|
|
_context4.next = 9;
|
|
break;
|
|
|
|
case 6:
|
|
_context4.prev = 6;
|
|
_context4.t0 = _context4["catch"](0);
|
|
showMessage(alertType.Info, _context4.t0.message);
|
|
|
|
case 9:
|
|
case "end":
|
|
return _context4.stop();
|
|
}
|
|
}
|
|
}, _callee4, null, [[0, 6]]);
|
|
}));
|
|
return _deletedata.apply(this, arguments);
|
|
}
|
|
|
|
function getDbSchema() {
|
|
var table = {
|
|
name: 'tbl_network',
|
|
columns: {
|
|
id: {
|
|
primaryKey: true,
|
|
dataType: 'string'
|
|
},
|
|
name: {
|
|
notNull: true,
|
|
dataType: 'string'
|
|
},
|
|
}
|
|
}
|
|
|
|
var db = {
|
|
name: 'Db_network',
|
|
tables: [table]
|
|
}
|
|
return db;
|
|
}
|
|
|
|
function drag(ev) {
|
|
ev.dataTransfer.setData("text", ev.target.id);
|
|
}
|
|
|
|
var lastDownTarget, canvas;
|
|
|
|
|
|
document.addEventListener('click', function (event) {
|
|
lastDownTarget = event.target.tagName;
|
|
}, false);
|
|
|
|
|
|
document.addEventListener('keydown', function (event) {
|
|
//if (lastDownTarget == "CANVAS") {
|
|
//90 - z- undo, 89 - y - redo
|
|
if (event.target.type != "text") {
|
|
if (event.keyCode == 90 && event.ctrlKey) {
|
|
$("#button_undo").click();
|
|
showHideDrawerandMenu();
|
|
}
|
|
if (event.keyCode == 89 && event.ctrlKey) {
|
|
$("#button_redo").click();
|
|
showHideDrawerandMenu();
|
|
}
|
|
}
|
|
//}
|
|
}, false);
|
|
|
|
|
|
|
|
var rand = function () {
|
|
return Math.random().toString(36).substr(2); // remove `0.`
|
|
};
|
|
|
|
var token = function () {
|
|
return rand() + rand(); // to make it longer
|
|
};
|
|
|
|
function destroy() {
|
|
if (network !== null) {
|
|
network.destroy();
|
|
network = null;
|
|
}
|
|
}
|
|
function draw(isImport) {
|
|
//destroy();
|
|
//nodes = [];
|
|
//edges = [];
|
|
|
|
// create a network
|
|
var container = document.getElementById("mynetwork");
|
|
// create an array with nodes
|
|
nodes = new vis.DataSet([
|
|
|
|
]);
|
|
|
|
// create an array with edges
|
|
edges = new vis.DataSet([
|
|
|
|
]);
|
|
|
|
//data = {
|
|
// nodes: nodes,
|
|
// edges: edges
|
|
//}
|
|
//if (!isImport) {
|
|
|
|
// //var tempData = JSON.parse(localStorage.getItem("networkData"));
|
|
// var tempData = "";
|
|
// try {
|
|
// tempData = JSON.parse(dat[0].name);
|
|
// debugger;
|
|
// if (tempData['ietf-network:networks'].network[0].node.length > 0) {
|
|
// Swal.fire({
|
|
// icon: 'warning',
|
|
// title: '',
|
|
// text: 'do you want to load network topology from local storage ?',
|
|
// showCancelButton: true,
|
|
// confirmButtonText: "OK",
|
|
// closeOnConfirm: true,
|
|
// confirmButtonColor: '#49508a',
|
|
// width: 375,
|
|
// height: 200,
|
|
// allowOutsideClick: false
|
|
// }).then((result) => {
|
|
// if (result.value) {
|
|
// nodes = getNodeData(tempData.nodes);
|
|
// edges = getEdgeData(tempData.edges);
|
|
// isLocalStorage = true;
|
|
// }
|
|
// });
|
|
// }
|
|
// }
|
|
// catch (e) {
|
|
// }
|
|
|
|
//}
|
|
|
|
|
|
if (isImport) {
|
|
data = {
|
|
nodes: new vis.DataSet(importNodes),
|
|
edges: new vis.DataSet(importEdges)
|
|
}
|
|
}
|
|
else {
|
|
data = {
|
|
nodes: nodes,
|
|
edges: edges
|
|
}
|
|
}
|
|
|
|
var iteration = data.nodes.length + data.edges.length;
|
|
options = {
|
|
//width: width,
|
|
//height: height,
|
|
interaction: optionsJSON.interaction,
|
|
physics: {
|
|
stabilization: {
|
|
enabled: true,
|
|
iterations: 0,
|
|
updateInterval: 0,
|
|
},
|
|
},
|
|
edges: {
|
|
font: optionsJSON.edges.font,
|
|
smooth: optionsJSON.edges.smooth
|
|
},
|
|
nodes:
|
|
{
|
|
shape: roadmJSON.shape,
|
|
size: roadmJSON.size,
|
|
icon: roadmJSON.icon,
|
|
color: roadmJSON.color,
|
|
font: roadmJSON.font
|
|
},
|
|
manipulation: {
|
|
enabled: false,
|
|
addNode: function (data, callback) {
|
|
|
|
//if (isExpandedView || isImportJSON) {
|
|
// return;
|
|
//}
|
|
if (nodeMode > 0 && nodeMode < 7) {
|
|
addNodes(data, callback);
|
|
}
|
|
},
|
|
addEdge: function (data, callback) {
|
|
if (data.from == data.to)
|
|
return;
|
|
|
|
if (isSingleFiberMode == 1 || isSingleFiberMode == 1) {
|
|
addEdgeData = {
|
|
from: data.from,
|
|
to: data.to
|
|
};
|
|
addFiber();
|
|
}
|
|
else if (isSinglePatchMode == 1 || isDualPatchMode == 1) {
|
|
addPatchData = {
|
|
from: data.from,
|
|
to: data.to
|
|
};
|
|
if (isSinglePatchMode == 1)
|
|
addSinglePatch();
|
|
else if (isDualPatchMode == 1)
|
|
addDualPatch();
|
|
|
|
}
|
|
else if (isAddService == 1) {
|
|
addServiceData = {
|
|
from: data.from,
|
|
to: data.to
|
|
};
|
|
addService();
|
|
}
|
|
},
|
|
},
|
|
};
|
|
network = new vis.Network(container, data, options);
|
|
|
|
|
|
|
|
//$('canvas').css('width', '');
|
|
//$('canvas').css('height', '');
|
|
//$('canvas').css('border', '1px solid lightgray');
|
|
//$('*.vis-network').css('overflow', 'auto');
|
|
//$("canvas").prop('width', $('canvas').width()-2);
|
|
//$("canvas").prop('height', $('canvas').height()-2);
|
|
|
|
//$("#txtw").val($('canvas').width());
|
|
//$("#txth").val($('canvas').height());
|
|
|
|
//if (isImport)
|
|
// $('*.vis-zoomIn, *.vis-zoomOut, *.vis-zoomExtends, *.vis-right, *.vis-left, *.vis-up, *.vis-down').css('position', 'fixed');
|
|
|
|
//container.addEventListener("wheel", function (e) {
|
|
// if (e.wheelDelta < 0) {
|
|
// //scroll down
|
|
// let w, h;
|
|
// w = $('canvas').width() - 50;
|
|
// h = $('canvas').height() - 50;
|
|
// $("canvas").prop('width', w);
|
|
// $("canvas").prop('height', h);
|
|
// network.addNodeMode();
|
|
// } else {
|
|
// //scroll up
|
|
|
|
// let w, h;
|
|
// w = $('canvas').width() + 50;
|
|
// h = $('canvas').height() + 50;
|
|
// $("canvas").prop('width', w);
|
|
// $("canvas").prop('height', h);
|
|
// network.addNodeMode();
|
|
// }
|
|
|
|
// //prevent page fom scrolling
|
|
// return false;
|
|
//})
|
|
|
|
network.on("click", function (params) {
|
|
//$("#txtx").val(params.pointer.canvas.x);
|
|
//$("#txty").val(params.pointer.canvas.y);
|
|
//alert(params.pointer.canvas.x+' , '+ params.pointer.canvas.y);
|
|
$("#hoverDiv").hide();
|
|
//console.log(params.pointer.canvas.x, params.pointer.canvas.y);
|
|
if (!params.event.srcEvent.ctrlKey)
|
|
remove_NodeHighlight();
|
|
else {
|
|
|
|
var clickedNode = this.body.nodes[this.getNodeAt(params.pointer.DOM)];
|
|
if (clickedNode != undefined) {
|
|
var nodeDetails = network.body.data.nodes.get(clickedNode.id);
|
|
if (!nodeSelect) {
|
|
if (!network.body.nodes[clickedNode.id].selected) {
|
|
if (nodeDetails.h_image) {
|
|
network.body.data.nodes.update({
|
|
id: nodeDetails.id, image: nodeDetails.h_image, h_image: nodeDetails.image, is_highlight: false
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
var sNodes = network.body.data.nodes.get({
|
|
filter: function (item) {
|
|
return (item.is_highlight == true);
|
|
}
|
|
});
|
|
|
|
if (sNodes.length == 0)
|
|
network.unselectAll();
|
|
nodeSelect = false;
|
|
|
|
});
|
|
|
|
network.on("selectEdge", function (data) {
|
|
//nodeMode = "";
|
|
|
|
});
|
|
network.on("selectNode", function (params) {
|
|
//if (isExpandedView || isImportJSON) {
|
|
// return;
|
|
//}
|
|
//nodeMode = "";
|
|
var clickedNode = this.body.nodes[this.getNodeAt(params.pointer.DOM)];
|
|
var nodeDetails = network.body.data.nodes.get(clickedNode.id);
|
|
var copyDetails;
|
|
//if (isCopyPara || (!isCopyPara && params.nodes.length > 1 && params.event.srcEvent.ctrlKey)) {
|
|
if (isCopyPara || (!isCopyPara && params.event.srcEvent.ctrlKey)) {
|
|
|
|
if (isCopyPara)
|
|
copyDetails = network.body.data.nodes.get(copiedNodeID);
|
|
else {
|
|
var sNodes = network.body.data.nodes.get({
|
|
filter: function (item) {
|
|
return (item.is_highlight == true);
|
|
}
|
|
});
|
|
if (params.nodes.length > 1) {
|
|
if (sNodes.length > 0)
|
|
copyDetails = network.body.data.nodes.get(sNodes[0].id);
|
|
else
|
|
copyDetails = network.body.data.nodes.get(params.nodes[params.nodes.length - 1]);
|
|
} else {
|
|
copyDetails = network.body.data.nodes.get(params.nodes[0]);
|
|
}
|
|
}
|
|
|
|
type_name = copyDetails.node_type;
|
|
if (copyDetails.node_type == amplifierJSON.node_type) {
|
|
if (copyDetails.amp_category == ramanampJSON.amp_category)
|
|
type_name = 'Raman Amplifier';
|
|
else
|
|
type_name = copyDetails.amp_category;
|
|
}
|
|
else if (copyDetails.node_type == roadmJSON.node_type)
|
|
type_name = copyDetails.node_type.toUpperCase();
|
|
else if (copyDetails.node_type == fusedJSON.node_type)
|
|
type_name = "Attenuator";
|
|
|
|
|
|
if (copyDetails.node_type != nodeDetails.node_type) {
|
|
showMessage(alertType.Error, 'Please select same type of node (' + type_name + ')');
|
|
nodeSelect = true;
|
|
return;
|
|
|
|
}
|
|
else {
|
|
if (copyDetails.amp_category && nodeDetails.amp_category) {
|
|
if (copyDetails.amp_category != nodeDetails.amp_category) {
|
|
showMessage(alertType.Error, 'Please select same type of node (' + type_name + ')');
|
|
nodeSelect = true;
|
|
return;
|
|
}
|
|
else {
|
|
$('#toast').toast('hide');
|
|
}
|
|
|
|
}
|
|
else
|
|
$('#toast').toast('hide');
|
|
}
|
|
|
|
if (params.event.srcEvent.ctrlKey) {
|
|
var image;
|
|
if (nodeDetails.node_type == roadmJSON.node_type) {
|
|
if (nodeDetails.image == DIR + roadmJSON.h_image) {
|
|
image = nodeDetails.h_image;
|
|
}
|
|
else {
|
|
if (nodeDetails.image == DIR + roadmJSON.w_image)
|
|
image = DIR + roadmJSON.h_image;
|
|
else if (nodeDetails.image == DIR + roadmJSON.image)
|
|
image = DIR + roadmJSON.fh_image;
|
|
}
|
|
}
|
|
else if (nodeDetails.node_type == fusedJSON.node_type) {
|
|
if (nodeDetails.image == DIR + fusedJSON.h_image) {
|
|
image = nodeDetails.h_image;
|
|
}
|
|
else {
|
|
if (nodeDetails.image == DIR + fusedJSON.w_image)
|
|
image = DIR + fusedJSON.h_image;
|
|
else if (nodeDetails.image == DIR + fusedJSON.image)
|
|
image = DIR + fusedJSON.fh_image;
|
|
}
|
|
}
|
|
else if (nodeDetails.node_type == transceiverJSON.node_type) {
|
|
if (nodeDetails.image == DIR + transceiverJSON.h_image) {
|
|
image = nodeDetails.h_image;
|
|
}
|
|
else {
|
|
if (nodeDetails.image == DIR + transceiverJSON.w_image)
|
|
image = DIR + transceiverJSON.h_image;
|
|
else if (nodeDetails.image == DIR + transceiverJSON.image)
|
|
image = DIR + transceiverJSON.fh_image;
|
|
}
|
|
}
|
|
else if (nodeDetails.node_type == amplifierJSON.node_type) {
|
|
if (nodeDetails.amp_category == amplifierJSON.amp_category) {
|
|
if (nodeDetails.image == DIR + amplifierJSON.h_image) {
|
|
image = nodeDetails.h_image;
|
|
}
|
|
else {
|
|
if (nodeDetails.image == DIR + amplifierJSON.w_image)
|
|
image = DIR + amplifierJSON.h_image;
|
|
else if (nodeDetails.image == DIR + amplifierJSON.image)
|
|
image = DIR + amplifierJSON.fh_image;
|
|
}
|
|
}
|
|
else if (nodeDetails.amp_category == ramanampJSON.amp_category) {
|
|
if (nodeDetails.image == DIR + ramanampJSON.h_image) {
|
|
image = nodeDetails.h_image;
|
|
}
|
|
else {
|
|
if (nodeDetails.image == DIR + ramanampJSON.w_image)
|
|
image = DIR + ramanampJSON.h_image;
|
|
else if (nodeDetails.image == DIR + ramanampJSON.image)
|
|
image = DIR + ramanampJSON.fh_image;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (image) {
|
|
var highlight = true;
|
|
if (image == DIR + roadmJSON.image || image == DIR + roadmJSON.w_image)
|
|
highlight = false;
|
|
else if (image == DIR + fusedJSON.image || image == DIR + fusedJSON.w_image)
|
|
highlight = false;
|
|
else if (image == DIR + transceiverJSON.image || image == DIR + transceiverJSON.w_image)
|
|
highlight = false;
|
|
else if (image == DIR + amplifierJSON.image || image == DIR + amplifierJSON.w_image)
|
|
highlight = false;
|
|
else if (image == DIR + ramanampJSON.image || image == DIR + ramanampJSON.w_image)
|
|
highlight = false;
|
|
|
|
network.body.data.nodes.update({
|
|
id: nodeDetails.id, image: image, h_image: nodeDetails.image, is_highlight: highlight
|
|
});
|
|
}
|
|
|
|
nodeSelect = true;
|
|
}
|
|
else {
|
|
nodeSelect = false;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
});
|
|
network.on("doubleClick", function (data) {
|
|
//var type = _nodesDB().first();
|
|
//if (type.type == "node") {
|
|
// network.editNodeMode();
|
|
//}
|
|
//else {
|
|
// network.editEdgeMode();
|
|
//}
|
|
//_nodesDB().remove();
|
|
});
|
|
network.on("oncontext", function (data, callback) {
|
|
|
|
|
|
//if (isExpandedView || isImportJSON) {
|
|
// return;
|
|
//}
|
|
//nodeMode = "";
|
|
//data.preventDefault();
|
|
insertNodeX = data.pointer.canvas.x;
|
|
insertNodeY = data.pointer.canvas.y;
|
|
$("#hoverDiv").hide();
|
|
var nodeDatas = this.body.nodes[this.getNodeAt(data.pointer.DOM)];
|
|
var edgeDatas = this.body.edges[this.getEdgeAt(data.pointer.DOM)];
|
|
var nodeData = "";
|
|
var edgeData = "";
|
|
if (nodeDatas != undefined)
|
|
nodeData = nodeDatas.id;
|
|
if (edgeDatas != undefined)
|
|
edgeData = edgeDatas.id;
|
|
|
|
var sNodes = network.body.data.nodes.get({
|
|
fields: ['id'],
|
|
filter: function (item) {
|
|
return (item.is_highlight == true);
|
|
}
|
|
});
|
|
|
|
var nodesArray = [];
|
|
if (data.nodes.length > 0 && sNodes.length > 0) {
|
|
nodesArray = sNodes;
|
|
//nodesArray.push(nodeData);
|
|
}
|
|
else
|
|
nodesArray.push(nodeData);
|
|
|
|
|
|
var type = "";
|
|
var fiber_category = "";
|
|
var patch_category = "";
|
|
var amp_category = "";
|
|
if ((nodeData != '' && edgeData != '') || nodeData != '') {
|
|
type = network.body.data.nodes.get(nodeData).node_type;
|
|
amp_category = network.body.data.nodes.get(nodeData).amp_category;
|
|
}
|
|
else if (edgeData != '') {
|
|
type = network.body.data.edges.get(edgeData).component_type;
|
|
fiber_category = network.body.data.edges.get(edgeData).fiber_category;
|
|
patch_category = network.body.data.edges.get(edgeData).patch_category;
|
|
}
|
|
else {
|
|
if (showMenu == 1) {
|
|
if (isCopy) {
|
|
showContextMenu(data.event.pageX, data.event.pageY, "pasteMenu");
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
if (showMenu == 1) {
|
|
var copyDetails;
|
|
var type_name;
|
|
if (isCopyPara || (sNodes.length > 0)) {
|
|
|
|
if (isCopyPara)
|
|
copyDetails = network.body.data.nodes.get(copiedNodeID);
|
|
else
|
|
copyDetails = network.body.data.nodes.get(sNodes[0].id);
|
|
|
|
type_name = copyDetails.node_type;
|
|
if (copyDetails.node_type == amplifierJSON.node_type) {
|
|
if (copyDetails.amp_category == ramanampJSON.amp_category)
|
|
type_name = 'Raman Amplifier';
|
|
else
|
|
type_name = copyDetails.amp_category;
|
|
}
|
|
else if (copyDetails.node_type == roadmJSON.node_type)
|
|
type_name = copyDetails.node_type.toUpperCase();
|
|
else if (copyDetails.node_type == fusedJSON.node_type)
|
|
type_name = "Attenuator";
|
|
|
|
//if (nodeData == copiedNodeID) {
|
|
// showMessage(alertType.Error, 'Please select same type of other node (' + type_name + ')');
|
|
// return;
|
|
//}
|
|
|
|
if (type != copyDetails.node_type) {
|
|
|
|
showMessage(alertType.Error, 'Please select same type of node (' + type_name + ')');
|
|
return;
|
|
}
|
|
else {
|
|
if (type == copyDetails.node_type) {
|
|
|
|
if (type == amplifierJSON.node_type && copyDetails.node_type == amplifierJSON.node_type) {
|
|
if (amp_category != copyDetails.amp_category) {
|
|
showMessage(alertType.Error, 'Please select same type of node (' + type_name + ')');
|
|
return;
|
|
}
|
|
}
|
|
|
|
$('#toast').toast('hide');
|
|
|
|
//if (isCopyPara) {
|
|
|
|
// showContextMenu(data.event.pageX, data.event.pageY, "templateMenu");
|
|
// document.getElementById("rcProCancel").onclick = cancelPro.bind(
|
|
// this,
|
|
// nodeData,
|
|
// callback
|
|
|
|
// );
|
|
|
|
// document.getElementById("rcApplyPro").onclick = applyPro.bind(
|
|
// this,
|
|
// nodesArray,
|
|
// callback
|
|
|
|
// );
|
|
// return;
|
|
//}
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//to add only same type of node on multiple select
|
|
nodesArray = [];
|
|
if (data.nodes.length > 0 && sNodes.length > 0) {
|
|
|
|
for (var i = 0; i < sNodes.length; i++) {
|
|
if (network.body.data.nodes.get(sNodes[0].id).node_type == network.body.data.nodes.get(sNodes[i].id).node_type) {
|
|
if ((network.body.data.nodes.get(sNodes[0].id).node_type == network.body.data.nodes.get(sNodes[i].id).node_type) && network.body.data.nodes.get(sNodes[0].id).node_type == amplifierJSON.node_type) {
|
|
if (network.body.data.nodes.get(sNodes[0].id).amp_category == network.body.data.nodes.get(sNodes[i].id).amp_category)
|
|
nodesArray.push(sNodes[i].id);
|
|
|
|
}
|
|
else
|
|
nodesArray.push(sNodes[i].id);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
nodesArray.push(nodeData);
|
|
|
|
|
|
if (type == serviceJSON.component_type) {
|
|
if (showMenu == 2)//enable service menu
|
|
{
|
|
if (edgeData != undefined) {
|
|
|
|
showContextMenu(data.event.pageX, data.event.pageY, "serviceMenu");
|
|
document.getElementById("rcServiceEdit").onclick = serviceEdit.bind(
|
|
this,
|
|
edgeData,
|
|
callback
|
|
);
|
|
document.getElementById("rcServiceDelete").onclick = deleteService.bind(
|
|
this,
|
|
edgeData,
|
|
callback
|
|
);
|
|
}
|
|
}
|
|
|
|
}
|
|
else {
|
|
if (showMenu == 1)//2 enable node and fiber menus
|
|
{
|
|
if (type == roadmJSON.node_type || type == ILAJSON.node_type || type == fusedJSON.node_type || type == transceiverJSON.node_type)//node || amp ||fused||transceiver
|
|
{
|
|
if (nodeData != undefined) {
|
|
if (type == roadmJSON.node_type) {
|
|
|
|
|
|
$("#rcRoadmCopy").show();
|
|
$("#rcRoadmApplyPro").hide();
|
|
$("#rcRoadmCopyPara").show();
|
|
$("#rcRoadmCancel").hide();
|
|
|
|
if (isCopyPara) {
|
|
$("#rcRoadmCopy").show();
|
|
$("#rcRoadmApplyPro").show();
|
|
$("#rcRoadmCopyPara").hide();
|
|
$("#rcRoadmCancel").show();
|
|
}
|
|
else {
|
|
if (nodesArray.length > 1 && sNodes.length > 1) {
|
|
$("#rcRoadmCopy").hide();
|
|
$("#rcRoadmCopyPara").hide();
|
|
}
|
|
else {
|
|
$("#rcRoadmCopy").show();
|
|
$("#rcRoadmCopyPara").show();
|
|
}
|
|
}
|
|
|
|
showContextMenu(data.event.pageX, data.event.pageY, "roadmMenu");
|
|
document.getElementById("rcRoadmEdit").onclick = roadmEdit.bind(
|
|
this,
|
|
nodesArray,
|
|
callback
|
|
|
|
);
|
|
document.getElementById("rcRoadmDelete").onclick = deleteNode.bind(
|
|
this,
|
|
nodesArray,
|
|
callback
|
|
);
|
|
document.getElementById("rcRoadmCopy").onclick = copyNode.bind(
|
|
this,
|
|
nodeData,
|
|
callback
|
|
|
|
);
|
|
document.getElementById("rcRoadmCopyPara").onclick = copyNodePro.bind(
|
|
this,
|
|
nodeData,
|
|
callback
|
|
|
|
);
|
|
document.getElementById("rcRoadmApplyPro").onclick = applyPro.bind(
|
|
this,
|
|
nodesArray,
|
|
callback
|
|
|
|
);
|
|
document.getElementById("rcRoadmCancel").onclick = cancelPro.bind(
|
|
this,
|
|
nodeData,
|
|
callback
|
|
|
|
);
|
|
|
|
|
|
}
|
|
else if (type == fusedJSON.node_type) {
|
|
showContextMenu(data.event.pageX, data.event.pageY, "attenuatorMenu");
|
|
document.getElementById("rcAttenuatorEdit").onclick = attenuatorEdit.bind(
|
|
this,
|
|
nodeData,
|
|
callback
|
|
|
|
);
|
|
document.getElementById("rcAttenuatorDelete").onclick = deleteNode.bind(
|
|
this,
|
|
nodesArray,
|
|
callback
|
|
);
|
|
document.getElementById("rcAttenuatorCopy").onclick = copyNode.bind(
|
|
this,
|
|
nodeData,
|
|
callback
|
|
|
|
);
|
|
//document.getElementById("rcAttenuatorCopyPara").onclick = copyNodePro.bind(
|
|
// this,
|
|
// nodeData,
|
|
// callback
|
|
|
|
//);
|
|
}
|
|
else if (type == ILAJSON.node_type) {
|
|
if (amp_category == ILAJSON.amp_category) {
|
|
showContextMenu(data.event.pageX, data.event.pageY, "ILAMenu");
|
|
document.getElementById("rcILAEdit").onclick = ILAEdit.bind(
|
|
this,
|
|
nodeData,
|
|
callback
|
|
|
|
);
|
|
document.getElementById("rcILADelete").onclick = deleteNode.bind(
|
|
this,
|
|
nodeData,
|
|
callback
|
|
);
|
|
document.getElementById("rcILACopy").onclick = copyNode.bind(
|
|
this,
|
|
nodeData,
|
|
callback
|
|
|
|
);
|
|
}
|
|
else if (amp_category == amplifierJSON.amp_category) {
|
|
|
|
$("#rcAmplifierCopy").show();
|
|
$("#rcAmplifierCopyPara").show();
|
|
$("#rcAmpApplyPro").hide();
|
|
$("#rcAmpCancel").hide();
|
|
|
|
if (nodesArray.length > 1 && sNodes.length > 1) {
|
|
$("#rcAmplifierCopy").hide();
|
|
$("#rcAmplifierCopyPara").hide();
|
|
}
|
|
else {
|
|
$("#rcAmplifierCopy").show();
|
|
$("#rcAmplifierCopyPara").show();
|
|
}
|
|
|
|
if (isCopyPara) {
|
|
$("#rcAmplifierCopy").show();
|
|
$("#rcAmplifierCopyPara").hide();
|
|
$("#rcAmpApplyPro").show();
|
|
$("#rcAmpCancel").show();
|
|
}
|
|
|
|
showContextMenu(data.event.pageX, data.event.pageY, "amplifierMenu");
|
|
document.getElementById("rcAmplifierEdit").onclick = amplifierEdit.bind(
|
|
this,
|
|
nodesArray,
|
|
callback
|
|
|
|
);
|
|
document.getElementById("rcAmplifierDelete").onclick = deleteNode.bind(
|
|
this,
|
|
nodesArray,
|
|
callback
|
|
);
|
|
document.getElementById("rcAmplifierCopy").onclick = copyNode.bind(
|
|
this,
|
|
nodeData,
|
|
callback
|
|
|
|
);
|
|
document.getElementById("rcAmplifierCopyPara").onclick = copyNodePro.bind(
|
|
this,
|
|
nodeData,
|
|
callback
|
|
|
|
);
|
|
document.getElementById("rcAmpApplyPro").onclick = applyPro.bind(
|
|
this,
|
|
nodesArray,
|
|
callback
|
|
|
|
);
|
|
document.getElementById("rcAmpCancel").onclick = cancelPro.bind(
|
|
this,
|
|
nodeData,
|
|
callback
|
|
|
|
);
|
|
}
|
|
else if (amp_category == ramanampJSON.amp_category) {
|
|
|
|
$("#rcRamanAmpCopy").show();
|
|
$("#rcRamanAmpCopyPara").show();
|
|
$("#rcRamanCancel").hide();
|
|
$("#rcRamanApplyPro").hide();
|
|
|
|
if (nodesArray.length > 1 && sNodes.length > 1) {
|
|
$("#rcRamanAmpCopy").hide();
|
|
$("#rcRamanAmpCopyPara").hide();
|
|
}
|
|
else {
|
|
$("#rcRamanAmpCopy").show();
|
|
$("#rcRamanAmpCopyPara").show();
|
|
}
|
|
|
|
if (isCopyPara) {
|
|
$("#rcRamanAmpCopy").show();
|
|
$("#rcRamanAmpCopyPara").hide();
|
|
$("#rcRamanApplyPro").show();
|
|
$("#rcRamanCancel").show();
|
|
}
|
|
|
|
showContextMenu(data.event.pageX, data.event.pageY, "ramanAmpMenu");
|
|
document.getElementById("rcRamanAmpEdit").onclick = ramanAmpEdit.bind(
|
|
this,
|
|
nodesArray,
|
|
callback
|
|
|
|
);
|
|
document.getElementById("rcRamanAmpDelete").onclick = deleteNode.bind(
|
|
this,
|
|
nodesArray,
|
|
callback
|
|
);
|
|
document.getElementById("rcRamanAmpCopy").onclick = copyNode.bind(
|
|
this,
|
|
nodeData,
|
|
callback
|
|
|
|
);
|
|
document.getElementById("rcRamanAmpCopyPara").onclick = copyNodePro.bind(
|
|
this,
|
|
nodeData,
|
|
callback
|
|
|
|
);
|
|
document.getElementById("rcRamanApplyPro").onclick = applyPro.bind(
|
|
this,
|
|
nodesArray,
|
|
callback
|
|
|
|
);
|
|
document.getElementById("rcRamanCancel").onclick = cancelPro.bind(
|
|
this,
|
|
nodeData,
|
|
callback
|
|
|
|
);
|
|
}
|
|
}
|
|
else if (type == transceiverJSON.node_type) {
|
|
|
|
$("#rcTransceiverCopy").show();
|
|
$("#rcTransceiverCopyPara").show();
|
|
$("#rcTransApplyPro").hide();
|
|
$("#rcTransCancel").hide();
|
|
|
|
if (nodesArray.length > 1 && sNodes.length > 1) {
|
|
$("#rcTransceiverCopy").hide();
|
|
$("#rcTransceiverCopyPara").hide();
|
|
}
|
|
else {
|
|
$("#rcTransceiverCopy").show();
|
|
$("#rcTransceiverCopyPara").show();
|
|
}
|
|
if (isCopyPara) {
|
|
$("#rcTransceiverCopy").show();
|
|
$("#rcTransceiverCopyPara").hide();
|
|
$("#rcTransApplyPro").show();
|
|
$("#rcTransCancel").show();
|
|
}
|
|
showContextMenu(data.event.pageX, data.event.pageY, "transceiverMenu");
|
|
document.getElementById("rcTransceiverEdit").onclick = transceiverEdit.bind(
|
|
this,
|
|
nodesArray,
|
|
callback
|
|
|
|
);
|
|
document.getElementById("rcTransceiverDelete").onclick = deleteNode.bind(
|
|
this,
|
|
nodesArray,
|
|
callback
|
|
);
|
|
document.getElementById("rcTransceiverCopy").onclick = copyNode.bind(
|
|
this,
|
|
nodeData,
|
|
callback
|
|
|
|
);
|
|
document.getElementById("rcTransceiverCopyPara").onclick = copyNodePro.bind(
|
|
this,
|
|
nodeData,
|
|
callback
|
|
|
|
);
|
|
document.getElementById("rcTransApplyPro").onclick = applyPro.bind(
|
|
this,
|
|
nodesArray,
|
|
callback
|
|
|
|
);
|
|
document.getElementById("rcTransCancel").onclick = cancelPro.bind(
|
|
this,
|
|
nodeData,
|
|
callback
|
|
|
|
);
|
|
}
|
|
}
|
|
}
|
|
else if (type == dualFiberJSON.component_type) {
|
|
|
|
if (edgeData != undefined) {
|
|
if (fiber_category == dualFiberJSON.fiber_category) {
|
|
if ($("#menuInserNode").text() == "-")
|
|
$("#menuInserNode").click();
|
|
showContextMenu(data.event.pageX, data.event.pageY, "dualFiberMenu");
|
|
|
|
document.getElementById("rcDualInsertROADM").onclick = dualFiberInsertNode.bind(
|
|
this,
|
|
edgeData,
|
|
'Roadm',
|
|
callback
|
|
);
|
|
document.getElementById("rcDualInsertAttenuator").onclick = dualFiberInsertNode.bind(
|
|
this,
|
|
edgeData,
|
|
'Fused',
|
|
callback
|
|
);
|
|
//document.getElementById("rcDualInsertTransceiver").onclick = dualFiberInsertNode.bind(
|
|
// this,
|
|
// edgeData,
|
|
// 'Transceiver',
|
|
// callback
|
|
//);
|
|
document.getElementById("rcDualInsertILA").onclick = dualFiberInsertNode.bind(
|
|
this,
|
|
edgeData,
|
|
'ILA',
|
|
callback
|
|
);
|
|
document.getElementById("rcDualFiberEdit").onclick = dualFiberEdit.bind(
|
|
this,
|
|
edgeData,
|
|
callback
|
|
);
|
|
document.getElementById("rcDualFiberDelete").onclick = deleteFiber.bind(
|
|
this,
|
|
edgeData,
|
|
callback
|
|
);
|
|
}
|
|
if (fiber_category == singleFiberJSON.fiber_category) {
|
|
if ($("#menuSingleFiberInser").text() == "-")
|
|
$("#menuSingleFiberInser").click();
|
|
showContextMenu(data.event.pageX, data.event.pageY, "singleFiberMenu");
|
|
document.getElementById("rcSingleInsertROADM").onclick = singleFiberInsertNode.bind(
|
|
this,
|
|
edgeData,
|
|
'Roadm',
|
|
callback
|
|
);
|
|
document.getElementById("rcSingleInsertAttenuator").onclick = singleFiberInsertNode.bind(
|
|
this,
|
|
edgeData,
|
|
'Fused',
|
|
callback
|
|
);
|
|
//document.getElementById("rcSingleInsertTransceiver").onclick = singleFiberInsertNode.bind(
|
|
// this,
|
|
// edgeData,
|
|
// 'Transceiver',
|
|
// callback
|
|
//);
|
|
document.getElementById("rcSingleInsertAmplifier").onclick = singleFiberInsertNode.bind(
|
|
this,
|
|
edgeData,
|
|
'Amplifier',
|
|
callback
|
|
);
|
|
document.getElementById("rcSingleInsertRamanAmp").onclick = singleFiberInsertNode.bind(
|
|
this,
|
|
edgeData,
|
|
'RamanAmplifier',
|
|
callback
|
|
);
|
|
document.getElementById("rcSingleFiberEdit").onclick = singleFiberEdit.bind(
|
|
this,
|
|
edgeData,
|
|
callback
|
|
);
|
|
document.getElementById("rcSingleFiberDelete").onclick = deleteFiber.bind(
|
|
this,
|
|
edgeData,
|
|
callback
|
|
);
|
|
}
|
|
}
|
|
|
|
}
|
|
else if (type == singlePatchJSON.component_type) {
|
|
|
|
if (edgeData != undefined) {
|
|
|
|
if (patch_category == singlePatchJSON.patch_category) {
|
|
|
|
showContextMenu(data.event.pageX, data.event.pageY, "singlePatchMenu");
|
|
document.getElementById("rcSinglePatchEdit").onclick = singlePatchEdit.bind(
|
|
this,
|
|
edgeData,
|
|
callback
|
|
);
|
|
document.getElementById("rcSinglePatchDelete").onclick = deletePatch.bind(
|
|
this,
|
|
edgeData,
|
|
callback
|
|
);
|
|
}
|
|
if (patch_category == dualPatchJSON.patch_category) {
|
|
showContextMenu(data.event.pageX, data.event.pageY, "dualPatchMenu");
|
|
document.getElementById("rcDualPatchEdit").onclick = dualPatchEdit.bind(
|
|
this,
|
|
edgeData,
|
|
callback
|
|
);
|
|
document.getElementById("rcDualPatchDelete").onclick = deletePatch.bind(
|
|
this,
|
|
edgeData,
|
|
callback
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
_nodesDB().remove();
|
|
});
|
|
|
|
|
|
network.on("hoverNode", function (params) {
|
|
try {
|
|
displayNodesHover(params);
|
|
}
|
|
catch (e) { }
|
|
});
|
|
network.on("blurNode", function (params) {
|
|
$('#hoverDiv').hide();
|
|
});
|
|
network.on("hoverEdge", function (params) {
|
|
try {
|
|
displayFiberHover(params);
|
|
}
|
|
catch (e) { }
|
|
});
|
|
network.on("blurEdge", function (params) {
|
|
$('#hoverDiv').hide();
|
|
});
|
|
|
|
network.on("zoom", function (params) {
|
|
//if (params.direction == "-" && params.scale <= 0.6) {
|
|
// zoomIn = true;
|
|
// if (zoomOut) {
|
|
// data.nodes.off("*", change_history_back);
|
|
// data.edges.off("*", change_history_back);
|
|
// network.setOptions(hiddenNodeTextOptions);
|
|
// zoomOut = false;
|
|
// }
|
|
//}
|
|
//else if (params.direction == "+" && params.scale > 0.6) {
|
|
// zoomOut = true;
|
|
// if (zoomIn) {
|
|
// data.nodes.off("*", change_history_back);
|
|
// data.edges.off("*", change_history_back);
|
|
|
|
// network.setOptions(hiddenNodeTextDisplayOptions);
|
|
// zoomIn = false;
|
|
// }
|
|
//}
|
|
//enableEdgeIndicator();
|
|
|
|
//if (nodeMode == nodeType.ROADM || nodeMode == nodeType.ILA || nodeMode == nodeType.Attenuator || nodeMode == nodeType.Transceiver || nodeMode == nodeType.Amplifier || nodeMode == nodeType.RamanAmplifier)
|
|
// network.addNodeMode();
|
|
});
|
|
|
|
network.on("stabilizationProgress", function (params) {
|
|
var widthFactor = params.iterations / params.total;
|
|
if (widthFactor > 0) {
|
|
document.getElementById("per").innerText =
|
|
Math.round(widthFactor * 100) + "%";
|
|
}
|
|
else
|
|
document.getElementById("per").innerText = "90%";
|
|
});
|
|
network.once("stabilizationIterationsDone", function () {
|
|
document.getElementById("per").innerText = "100%";
|
|
document.getElementById("loader").style.display = "none";
|
|
options.physics = false;
|
|
network.setOptions(options);
|
|
if (isImport) {
|
|
isImportJSON = true;
|
|
$("#ddlNetworkView").val(topologyView.Functional_View);
|
|
networkView(2);
|
|
$("#importEqpt").val('');
|
|
$('#divSelection').hide();
|
|
displayEdgeLabels = false;
|
|
hideEdgeLabels();
|
|
showMessage(alertType.Success, "JSON file loaded successfully");
|
|
//if (network.getScale() <= 0.6) {
|
|
|
|
// data.nodes.off("*", change_history_back);
|
|
// data.edges.off("*", change_history_back);
|
|
// network.setOptions(hiddenNodeTextOptions);
|
|
//}
|
|
}
|
|
|
|
});
|
|
|
|
if (!isImport) {
|
|
options.physics = false;
|
|
network.setOptions(options);
|
|
hideEdgeLabels();
|
|
}
|
|
|
|
history_list_back.push({
|
|
nodes_his: data.nodes.get(data.nodes.getIds()),
|
|
edges_his: data.edges.get(data.edges.getIds())
|
|
});
|
|
// event on
|
|
data.nodes.on("*", change_history_back);
|
|
data.edges.on("*", change_history_back);
|
|
|
|
//var tempData = JSON.parse(localStorage.getItem("networkData"));
|
|
|
|
//load topology from local storage
|
|
//var tempData = "";
|
|
//try {
|
|
// tempData = JSON.parse(dat[0].name);
|
|
// if (tempData['ietf-network:networks'].network[0].node.length > 0) {
|
|
// Swal.fire({
|
|
// icon: 'info',
|
|
// title: '',
|
|
// text: 'do you want to load network topology from local storage ?',
|
|
// showCancelButton: true,
|
|
// confirmButtonText: "OK",
|
|
// closeOnConfirm: true,
|
|
// confirmButtonColor: '#49508a',
|
|
// width: 375,
|
|
// height: 200,
|
|
// allowOutsideClick: false
|
|
// }).then((result) => {
|
|
// if (result.value) {
|
|
// eqptData = tempData;
|
|
// isEqptFile = true;
|
|
// eqpt_config = eqptData;
|
|
// load_EqptConfig(true);
|
|
// }
|
|
// });
|
|
// }
|
|
//}
|
|
//catch (e) {
|
|
//}
|
|
|
|
|
|
|
|
}
|
|
var zoomIn = true;
|
|
var zoomOut = true;
|
|
var hoverNodeData;
|
|
function displayNodesHover(params) {
|
|
var nodeDetails = network.body.data.nodes.get(params.node);
|
|
if (nodeDetails.component_type == roadmJSON.component_type) {
|
|
|
|
if (nodeDetails.node_type == roadmJSON.node_type) {
|
|
hoverNodeData = "Node type : " + nodeDetails.node_type.toUpperCase() + "\nNode name : " + nodeDetails.label + "\n";
|
|
}
|
|
else if (nodeDetails.node_type == fusedJSON.node_type) {
|
|
hoverNodeData = "Node type : Attenuator \nNode name : " + nodeDetails.label + "\n";
|
|
}
|
|
else if (nodeDetails.node_type == amplifierJSON.node_type) {
|
|
hoverNodeData = "Node type : " + nodeDetails.amp_category + "\nNode name : " + nodeDetails.label + "\n";
|
|
}
|
|
else
|
|
hoverNodeData = "Node type : " + nodeDetails.node_type + "\nNode name : " + nodeDetails.label + "\n";
|
|
}
|
|
|
|
$('#hoverDiv').html(htmlTitle(hoverNodeData));
|
|
showHoverDiv(params.event.pageX, params.event.pageY, "hoverDiv");
|
|
}
|
|
function displayFiberHover(params) {
|
|
var fiberDetails = network.body.data.edges.get(params.edge);
|
|
var fiber_type = "";
|
|
var span_length = "";
|
|
var span_loss = "";
|
|
if (fiberDetails.component_type == dualPatchJSON.component_type)
|
|
return;
|
|
if (fiberDetails.component_type == singleFiberJSON.component_type) {
|
|
if (fiberDetails.fiber_category == dualFiberJSON.fiber_category) {
|
|
var fromlabel = "(" + network.body.data.nodes.get(fiberDetails.from).label + " -> " + network.body.data.nodes.get(fiberDetails.to).label + ")";
|
|
var hoverData = fiberDetails.component_type + " name : " + fiberDetails.text + "\n";
|
|
//hoverData += "category : " + fiberDetails.fiber_category + "\n";
|
|
hoverData += "--------------------------\n";
|
|
var fromlabel = "Fiber A [" + network.body.data.nodes.get(fiberDetails.from).label + " -> " + network.body.data.nodes.get(fiberDetails.to).label + " ]";
|
|
hoverData += fromlabel + "\n";
|
|
|
|
if (fiberDetails.fiber_type)
|
|
fiber_type = fiberDetails.fiber_type;
|
|
if (fiberDetails.span_length)
|
|
span_length = fiberDetails.span_length;
|
|
if (fiberDetails.loss_coefficient)
|
|
loss_coefficient = fiberDetails.loss_coefficient;
|
|
if (fiberDetails.connector_in)
|
|
connector_in = fiberDetails.connector_in;
|
|
if (fiberDetails.connector_out)
|
|
connector_out = fiberDetails.connector_out;
|
|
if (fiberDetails.span_loss)
|
|
span_loss = fiberDetails.span_loss;
|
|
|
|
hoverData += "Fiber type : " + fiber_type + "\n";
|
|
hoverData += "Span length(in km) : " + span_length + "\n";
|
|
//hoverData += "Loss Coefficient(dB/km) : " + loss_coefficient + "\n";
|
|
//hoverData += "Connector IN(dB) : " + connector_in + "\n";
|
|
//hoverData += "Connector OUT(dB) : " + connector_out + "\n";
|
|
hoverData += "Span loss : " + span_loss + "\n";
|
|
|
|
hoverData += "--------------------------\n";
|
|
|
|
var rxToTx = fiberDetails.RxToTxFiber;
|
|
var fromlabel = "Fiber B [" + network.body.data.nodes.get(fiberDetails.to).label + " -> " + network.body.data.nodes.get(fiberDetails.from).label + " ]";
|
|
hoverData += fromlabel + "\n";
|
|
|
|
if (rxToTx.fiber_type)
|
|
fiber_type = rxToTx.fiber_type;
|
|
if (rxToTx.span_length)
|
|
span_length = rxToTx.span_length;
|
|
if (rxToTx.loss_coefficient)
|
|
loss_coefficient = rxToTx.loss_coefficient;
|
|
if (rxToTx.connector_in)
|
|
connector_in = rxToTx.connector_in;
|
|
if (rxToTx.connector_out)
|
|
connector_out = rxToTx.connector_out;
|
|
if (rxToTx.span_loss)
|
|
span_loss = rxToTx.span_loss;
|
|
|
|
hoverData += "Fiber type : " + fiber_type + "\n";
|
|
hoverData += "Span length(in km) : " + span_length + "\n";
|
|
//hoverData += "Loss Coefficient(dB/km) : " + loss_coefficient + "\n";
|
|
//hoverData += "Connector IN(dB) : " + connector_in + "\n";
|
|
//hoverData += "Connector OUT(dB) : " + connector_out + "\n";
|
|
hoverData += "Span loss : " + span_loss + "\n";
|
|
}
|
|
else if (fiberDetails.fiber_category == singleFiberJSON.fiber_category) {
|
|
var hoverData = fiberDetails.component_type + " name : " + fiberDetails.text + "\n";
|
|
//hoverData += "category : " + fiberDetails.fiber_category + "\n";
|
|
hoverData += "Source(Tx) : " + network.body.data.nodes.get(fiberDetails.from).label + "\n";
|
|
hoverData += "Destination(Rx) : " + network.body.data.nodes.get(fiberDetails.to).label + "\n";
|
|
|
|
if (fiberDetails.fiber_type)
|
|
fiber_type = fiberDetails.fiber_type;
|
|
if (fiberDetails.span_length)
|
|
span_length = fiberDetails.span_length;
|
|
if (fiberDetails.loss_coefficient)
|
|
loss_coefficient = fiberDetails.loss_coefficient;
|
|
if (fiberDetails.connector_in)
|
|
connector_in = fiberDetails.connector_in;
|
|
if (fiberDetails.connector_out)
|
|
connector_out = fiberDetails.connector_out;
|
|
if (fiberDetails.span_loss)
|
|
span_loss = fiberDetails.span_loss;
|
|
|
|
//hoverData += "Fiber type : " + fiber_type + "\n";
|
|
//hoverData += "Span length(in km) : " + span_length + "\n";
|
|
if (fiber_type == "")
|
|
hoverData += "<span style='color:red;'>Fiber type : " + fiber_type + "</span>\n";
|
|
else
|
|
hoverData += "Fiber type : " + fiber_type + "\n";
|
|
|
|
var spanlen = parseFloat(span_length);
|
|
|
|
if (isNaN(span_length) || spanlen <= 0 || span_length == "")
|
|
hoverData += "<span style='color:red;'>Span length(in km) : " + span_length + "</span>\n";
|
|
else
|
|
hoverData += "Span length(in km) : " + span_length + "\n";
|
|
|
|
//hoverData += "Loss Coefficient(dB/km) : " + loss_coefficient + "\n";
|
|
//hoverData += "Connector IN(dB) : " + connector_in + "\n";
|
|
//hoverData += "Connector OUT(dB) : " + connector_out + "\n";
|
|
hoverData += "Span loss : " + span_loss + "\n";
|
|
}
|
|
}
|
|
if (fiberDetails.component_type == serviceJSON.component_type) {
|
|
var hoverData = fiberDetails.component_type + " name : " + fiberDetails.text + "\n";
|
|
hoverData += "Source : " + network.body.data.nodes.get(fiberDetails.from).label + "\n";
|
|
hoverData += "Destination : " + network.body.data.nodes.get(fiberDetails.to).label + "\n";
|
|
hoverData += "Bandwidth (in Gbps) : " + fiberDetails.band_width + "\n";
|
|
}
|
|
$('#hoverDiv').html(htmlTitle(hoverData, commonJSON.background_color));
|
|
showHoverDiv(params.event.pageX, params.event.pageY, "hoverDiv");
|
|
}
|
|
|
|
//1-roadm, 2-amp, 3-fused, 4-transceiver, 6- raman amp
|
|
function AddNodeMode(nodemode) {
|
|
|
|
nodeMode = nodemode;
|
|
if (nodeMode) {
|
|
if (nodeMode > 0 && nodeMode < 7)
|
|
network.addNodeMode();
|
|
}
|
|
}
|
|
|
|
function htmlTitle(html) {
|
|
const container = document.createElement("pre");
|
|
container.innerHTML = html;
|
|
container.style.background = commonJSON.background_color;
|
|
//container.style.color = commonJSON.font_color;
|
|
container.style.font = commonJSON.font;
|
|
//container.style.fontSize = commonJSON.font_size;
|
|
container.style.padding = "5px";
|
|
container.style.margin = "0px";
|
|
container.style.border = commonJSON.border;
|
|
container.style.transition = "all 1s ease-in-out";
|
|
container.style.fontVariant = commonJSON.font_variant;
|
|
return container;
|
|
}
|
|
|
|
function init(isImport) {
|
|
|
|
initDb();
|
|
readdata();
|
|
|
|
if (isImport) {
|
|
draw(isImport);
|
|
|
|
}
|
|
else {
|
|
setTimeout(function () {
|
|
draw(isImport);
|
|
}, 1000);
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
function exportNetwork_Old(isSaveNetwork) {
|
|
//testing();
|
|
|
|
//var nodesModel = [];
|
|
|
|
//var edgesModel = [];
|
|
//$.each(network.body.nodes, function (i) {
|
|
// var data = {
|
|
// id: network.body.nodes[i].options.id,
|
|
// label: network.body.nodes[i].options.label,
|
|
// x: network.body.nodes[i].x,
|
|
// y: network.body.nodes[i].y,
|
|
// shape: network.body.nodes[i].options.shape,
|
|
// size: network.body.nodes[i].options.size,
|
|
// nodedegree: network.body.nodes[i].options.nodedegree,
|
|
// nodetype: network.body.nodes[i].options.nodetype,
|
|
// componentType: nodes.get(network.body.nodes[i].options.id).componentType,
|
|
// icon:
|
|
// network.body.nodes[i].options.icon,
|
|
// color: [
|
|
// {
|
|
// border: network.body.nodes[i].options.color.border,
|
|
// background: network.body.nodes[i].options.color.background,
|
|
// highlight: [
|
|
// {
|
|
// border: network.body.nodes[i].options.color.border,
|
|
// background: network.body.nodes[i].options.color.background,
|
|
// }
|
|
// ],
|
|
// hover: [
|
|
// {
|
|
// border: network.body.nodes[i].options.color.border,
|
|
// background: network.body.nodes[i].options.color.background,
|
|
// }
|
|
// ]
|
|
// }
|
|
// ],
|
|
// edges: network.getConnectedNodes(network.body.nodes[i].options.id)
|
|
// };
|
|
|
|
// let str = network.body.nodes[i].options.id;
|
|
// let checktext;
|
|
// try {
|
|
// checktext = str.substring(0, 7);
|
|
// }
|
|
// catch (e) { }
|
|
|
|
// if (data.x != undefined && data.y != undefined && checktext != "edgeId:")
|
|
// nodesModel.push(data);
|
|
//});
|
|
|
|
//$.each(network.body.edges, function (i) {
|
|
// var data = {
|
|
// id: network.body.edges[i].id,
|
|
// label: network.body.edges[i].options.label,
|
|
// //title: network.body.edges[i].title,
|
|
// from: network.body.edges[i].fromId,
|
|
// to: network.body.edges[i].toId,
|
|
// dashes: network.body.edges[i].options.dashes,
|
|
// length: network.body.edges[i].options.length,
|
|
// value: network.body.edges[i].options.value,
|
|
// componentType: edges.get(network.body.edges[i].id).componentType,
|
|
// options: [
|
|
// {
|
|
// color: [
|
|
// {
|
|
// color: network.body.edges[i].options.color.color,
|
|
// highlight: network.body.edges[i].options.color.highlight,
|
|
// hover: network.body.edges[i].options.color.hover,
|
|
// inherit: network.body.edges[i].options.color.inherit,
|
|
// opacity: network.body.edges[i].options.color.opacity,
|
|
|
|
// }
|
|
// ],
|
|
// background: [
|
|
// {
|
|
// color: network.body.edges[i].options.background.color,
|
|
// dashes: network.body.edges[i].options.background.dashes,
|
|
// enabled: network.body.edges[i].options.background.enabled,
|
|
// size: network.body.edges[i].options.background.size,
|
|
// }
|
|
// ],
|
|
// arrows: [
|
|
// {
|
|
// from: [
|
|
// {
|
|
// enabled: network.body.edges[i].options.arrows.from.enabled,
|
|
// type: network.body.edges[i].options.arrows.from.type
|
|
// }
|
|
// ],
|
|
// to: [
|
|
// {
|
|
// enabled: network.body.edges[i].options.arrows.to.enabled,
|
|
// type: network.body.edges[i].options.arrows.to.type
|
|
// }
|
|
// ],
|
|
// }
|
|
// ],
|
|
// font: [
|
|
// {
|
|
// align: network.body.edges[i].options.font.align
|
|
// }
|
|
// ],
|
|
// smooth: [
|
|
// {
|
|
// enabled: network.body.edges[i].options.smooth.enabled,
|
|
// roundness: network.body.edges[i].options.smooth.roundness,
|
|
// type: network.body.edges[i].options.smooth.type
|
|
// }
|
|
// ],
|
|
|
|
// }
|
|
// ]
|
|
|
|
// };
|
|
// edgesModel.push(data);
|
|
//});
|
|
|
|
|
|
|
|
|
|
|
|
//start test
|
|
var final = [];
|
|
var transceiverarr = [];
|
|
var roadmarr = [];
|
|
$.each(network.body.data.nodes.get(), function (index, item) {
|
|
if (item.node_type == transceiverJSON.node_type) {
|
|
var node = {
|
|
uid: item.id,
|
|
type: item.node_type,
|
|
metadata: {
|
|
location: {
|
|
latitude: item.x,
|
|
longitude: item.y,
|
|
city: item.label,
|
|
region: null
|
|
}
|
|
}
|
|
}
|
|
final.push(node);
|
|
}
|
|
else if (item.node_type == roadmJSON.node_type) {
|
|
var node = {
|
|
uid: item.id,
|
|
type: item.node_type,
|
|
params: {
|
|
target_pch_out_db: -0,
|
|
restrictions: {
|
|
preamp_variety_list: [
|
|
],
|
|
booster_variety_list: [
|
|
]
|
|
}
|
|
|
|
},
|
|
metadata: {
|
|
location: {
|
|
latitude: item.x,
|
|
longitude: item.y,
|
|
city: item.label,
|
|
region: null
|
|
}
|
|
}
|
|
}
|
|
final.push(node);
|
|
}
|
|
else if (item.node_type == fusedJSON.node_type) {
|
|
var node = {
|
|
uid: item.id,
|
|
type: item.node_type,
|
|
params: {
|
|
loss: 1
|
|
},
|
|
metadata: {
|
|
location: {
|
|
latitude: item.x,
|
|
longitude: item.y,
|
|
city: item.label,
|
|
region: ""
|
|
}
|
|
}
|
|
}
|
|
final.push(node);
|
|
}
|
|
else if (item.node_type == ILAJSON.node_type) {
|
|
var node = {
|
|
uid: item.id,
|
|
type: "Edfa",
|
|
type_variety: "std_low_gain",
|
|
operational: {
|
|
gain_target: 21.0,
|
|
delta_p: 1.0,
|
|
tilt_target: 0,
|
|
out_voa: 0
|
|
},
|
|
metadata: {
|
|
location: {
|
|
latitude: item.x,
|
|
longitude: item.y,
|
|
city: item.label,
|
|
region: ""
|
|
}
|
|
}
|
|
}
|
|
final.push(node);
|
|
}
|
|
});
|
|
var edgearay = [];
|
|
$.each(network.body.data.edges.get(), function (index, item) {
|
|
var edge = {
|
|
from_node: item.from,
|
|
to_node: item.to
|
|
}
|
|
edgearay.push(edge);
|
|
});
|
|
//final.push(transceiverarr);
|
|
//final.push(roadmarr);
|
|
var model = {
|
|
elements: final,
|
|
connections: edgearay
|
|
}
|
|
//end test
|
|
var exportValue = JSON.stringify(model, undefined, 2);
|
|
|
|
if (isSaveNetwork) {
|
|
addNetworData(exportValue);
|
|
return;
|
|
}
|
|
|
|
var filename = $("#txtFileName").val() + ".json";
|
|
|
|
var blob = new Blob([exportValue], {
|
|
type: "text/plain;charset=utf-8"
|
|
});
|
|
|
|
saveAs(blob, filename);
|
|
}
|
|
|
|
function exportNetwork(isSaveNetwork) {
|
|
|
|
//start test
|
|
var nodeList = [];
|
|
var edgeList = [];
|
|
var topologyArray = [];
|
|
var network_id = configData.project.network_id;
|
|
|
|
if (!eqpt_config['tip-photonic-simulation:simulation'] || !eqpt_config['tip-photonic-equipment:transceiver'] || !eqpt_config['tip-photonic-equipment:fiber'] || !eqpt_config['tip-photonic-equipment:amplifier']) {
|
|
showMessage(alertType.Error, "KeyError:'elements', try again");
|
|
return;
|
|
}
|
|
var elabel = "";
|
|
var ox;
|
|
var oy;
|
|
$.each(network.body.data.nodes.get(), function (index, item) {
|
|
ox = network.body.nodes[item.id].x;
|
|
oy = network.body.nodes[item.id].y;
|
|
|
|
if (item.node_type == transceiverJSON.node_type) {
|
|
var node = {
|
|
'node-id': item.label,
|
|
'tip-photonic-topology:transceiver': {
|
|
"model": item.transceiver_type
|
|
},
|
|
metadata: {
|
|
Positions: {
|
|
'X-co-ordinate': ox,
|
|
'Y-co-ordinate': oy,
|
|
city: item.label,
|
|
region: ""
|
|
}
|
|
}
|
|
}
|
|
nodeList.push(node);
|
|
}
|
|
else if (item.node_type == roadmJSON.node_type) {
|
|
var node = {
|
|
'node-id': item.label,
|
|
'tip-photonic-topology:roadm': {
|
|
"model": item.roadm_type
|
|
},
|
|
metadata: {
|
|
Positions: {
|
|
'X-co-ordinate': ox,
|
|
'Y-co-ordinate': oy,
|
|
city: item.label,
|
|
region: ""
|
|
}
|
|
}
|
|
}
|
|
nodeList.push(node);
|
|
}
|
|
else if (item.node_type == fusedJSON.node_type) {
|
|
var node = {
|
|
'node-id': item.label,
|
|
'tip-photonic-topology:attenuator': {
|
|
},
|
|
metadata: {
|
|
Positions: {
|
|
'X-co-ordinate': ox,
|
|
'Y-co-ordinate': oy,
|
|
city: item.label,
|
|
region: ""
|
|
}
|
|
}
|
|
}
|
|
nodeList.push(node);
|
|
}
|
|
else if (item.amp_category == amplifierJSON.amp_category) {
|
|
var node = {
|
|
'node-id': item.label,
|
|
'tip-photonic-topology:amplifier': {
|
|
"model": item.amp_type ? item.amp_type : "",
|
|
"gain-target": item.gain_target ? item.gain_target : "0.0",
|
|
"tilt-target": item.tilt_target ? item.tilt_target : "0.0",
|
|
"out-voa-target": item.out_voa_target ? item.out_voa_target : "0.0"
|
|
},
|
|
metadata: {
|
|
Positions: {
|
|
'X-co-ordinate': ox,
|
|
'Y-co-ordinate': oy,
|
|
city: item.label,
|
|
region: ""
|
|
}
|
|
}
|
|
}
|
|
nodeList.push(node);
|
|
}
|
|
else if (item.amp_category == ramanampJSON.amp_category) {
|
|
var node = {
|
|
'node-id': item.label,
|
|
'tip-photonic-topology:ramanamplifier': {
|
|
'model': item.amp_type,
|
|
'category': item.category
|
|
},
|
|
metadata: {
|
|
Positions: {
|
|
'X-co-ordinate': ox,
|
|
'Y-co-ordinate': oy,
|
|
city: item.label,
|
|
region: ""
|
|
}
|
|
}
|
|
}
|
|
nodeList.push(node);
|
|
}
|
|
});
|
|
|
|
$.each(network.body.data.edges.get(), function (index, item) {
|
|
var edge;
|
|
var fromLabel = network.body.data.nodes.get(item.from).label;
|
|
var toLabel = network.body.data.nodes.get(item.to).label;
|
|
if (item.label.trim() == "")
|
|
elabel = item.text;
|
|
else
|
|
elabel = item.label;
|
|
if (item.component_type == singleFiberJSON.component_type) {
|
|
edge = {
|
|
"link-id": elabel,
|
|
"source": {
|
|
"source-node": fromLabel
|
|
},
|
|
"destination": {
|
|
"dest-node": toLabel
|
|
},
|
|
"tip-photonic-topology:fiber": {
|
|
"type": item.fiber_type,
|
|
"length": item.span_length.toString(),
|
|
"attenuation-in": "",
|
|
"conn-att-in": item.connector_in,
|
|
"conn-att-out": item.connector_out,
|
|
//"loss_coef": item.loss_coefficient,
|
|
//"span-loss": item.span_loss
|
|
}
|
|
}
|
|
edgeList.push(edge);
|
|
}
|
|
else if (item.component_type == singlePatchJSON.component_type) {
|
|
edge = {
|
|
"link-id": elabel,
|
|
"source": {
|
|
"source-node": fromLabel
|
|
},
|
|
"destination": {
|
|
"dest-node": toLabel
|
|
},
|
|
"tip-photonic-topology:patch": {
|
|
}
|
|
}
|
|
edgeList.push(edge);
|
|
}
|
|
else if (item.component_type == serviceJSON.component_type) {
|
|
edge = {
|
|
"link-id": elabel,
|
|
"source": {
|
|
"source-node": fromLabel
|
|
},
|
|
"destination": {
|
|
"dest-node": toLabel
|
|
},
|
|
"tip-photonic-topology:service": {
|
|
"band-width": item.band_width
|
|
}
|
|
}
|
|
edgeList.push(edge);
|
|
}
|
|
|
|
});
|
|
|
|
if (eqpt_config["ietf-network:networks"].network[0]["network-id"])
|
|
network_id = eqpt_config["ietf-network:networks"].network[0]["network-id"];
|
|
|
|
var topology = {
|
|
'network-id': network_id,
|
|
'network-types': {
|
|
'tip-photonic-topology:photonic-topology': {}
|
|
},
|
|
node: nodeList,
|
|
'ietf-network-topology:link': edgeList
|
|
}
|
|
|
|
var simData = eqpt_config['tip-photonic-simulation:simulation'];;
|
|
var simGrid = simData["grid"];
|
|
var simAD = simData["autodesign"];
|
|
var simSM = simData["system-margin"];
|
|
var simulationData = JSON.parse(sessionStorage.getItem("simulationParameters"));
|
|
|
|
simGrid["frequency-min"] = simulationData["frequency-min"];
|
|
simGrid["frequency-max"] = simulationData["frequency-max"];
|
|
simGrid["spacing"] = simulationData["spacing"];
|
|
simGrid["frequency-min"] = simulationData["frequency-min"];
|
|
simSM = simulationData["system-margin"];
|
|
var simPara = {
|
|
grid: simGrid,
|
|
autodesign: simAD,
|
|
'system-margin': simSM
|
|
}
|
|
|
|
topologyArray.push(topology);
|
|
var model = {
|
|
'tip-photonic-equipment:amplifier': eqpt_config['tip-photonic-equipment:amplifier'],
|
|
'tip-photonic-equipment:fiber': eqpt_config['tip-photonic-equipment:fiber'],
|
|
'tip-photonic-equipment:transceiver': eqpt_config['tip-photonic-equipment:transceiver'],
|
|
'tip-photonic-equipment:roadm': eqpt_config['tip-photonic-equipment:roadm'],
|
|
'tip-photonic-simulation:simulation': simPara,
|
|
'ietf-network:networks': {
|
|
'network': topologyArray
|
|
}
|
|
}
|
|
//end test
|
|
var exportValue = JSON.stringify(model, undefined, 2);
|
|
|
|
//if (isSaveNetwork) {
|
|
// addNetworData(exportValue);
|
|
// return;
|
|
//}
|
|
|
|
var filename = 'network.json';
|
|
|
|
if (!isSaveNetwork)
|
|
filename = $("#txtFileName").val() + ".json";
|
|
|
|
|
|
var blob = new Blob([exportValue], {
|
|
type: "text/plain;charset=utf-8"
|
|
});
|
|
|
|
saveAs(blob, filename);
|
|
}
|
|
|
|
var importNodes = [];
|
|
var importEdges = [];
|
|
|
|
var _eqpt_json;
|
|
var isEqptFile = false;
|
|
|
|
function hideLoader() {
|
|
$('#loader').hide();
|
|
$("#importEqpt").val('');
|
|
}
|
|
|
|
function load_EqptConfig(isFileUpload) {
|
|
try {
|
|
if (!eqpt_config['tip-photonic-simulation:simulation'] || !eqpt_config['tip-photonic-equipment:transceiver'] || !eqpt_config['tip-photonic-equipment:fiber'] || !eqpt_config['tip-photonic-equipment:amplifier']) {
|
|
showMessage(alertType.Error, "KeyError:'equipment elements', try again");
|
|
hideLoader()
|
|
return;
|
|
}
|
|
else {
|
|
if (isFileUpload) {
|
|
_import_json = eqptData['ietf-network:networks'];
|
|
importNetwork();
|
|
}
|
|
}
|
|
$("#txtFrgMin").val('');
|
|
$("#txtFrqMax").val('');
|
|
$("#txtGridSpac").val('');
|
|
$("#txtNoOfChannel").val('');
|
|
$("#txtAgeingMargin").val('');
|
|
|
|
$('#ddlTransceiverType').empty();
|
|
$('#ddlFiberAType').empty();
|
|
$('#ddlFiberBType').empty();
|
|
$('#ddlSingleFiberType').empty();
|
|
|
|
|
|
$('#ddlPreAmpType').empty();
|
|
$('#ddlBoosterType').empty();
|
|
$('#ddlAmplifierType').empty();
|
|
$('#ddlRoadmType').empty();
|
|
|
|
|
|
if (eqpt_config['tip-photonic-simulation:simulation']) {
|
|
var simulationsData = eqpt_config['tip-photonic-simulation:simulation'];
|
|
var simulations = simulationsData["grid"];
|
|
saveSimulations(simulations["frequency-min"], simulations["frequency-max"], simulations.spacing, "40", simulationsData["system-margin"]);
|
|
}
|
|
|
|
if (eqpt_config['tip-photonic-equipment:transceiver']) {
|
|
$.each(eqpt_config['tip-photonic-equipment:transceiver'], function (index, item) {
|
|
$('#ddlTransceiverType').append('<option value="' + item.type + '">' + item.type + '</option>');
|
|
});
|
|
}
|
|
if (eqpt_config['tip-photonic-equipment:fiber']) {
|
|
$.each(eqpt_config['tip-photonic-equipment:fiber'], function (index, item) {
|
|
$('#ddlFiberAType').append('<option value="' + item.type + '">' + item.type + '</option>');
|
|
$('#ddlFiberBType').append('<option value="' + item.type + '">' + item.type + '</option>');
|
|
$('#ddlSingleFiberType').append('<option value="' + item.type + '">' + item.type + '</option>');
|
|
|
|
});
|
|
}
|
|
if (eqpt_config["tip-photonic-equipment:roadm"]) {
|
|
$.each(eqpt_config["tip-photonic-equipment:roadm"], function (index, item) {
|
|
$("#ddlRoadmType").append('<option value="' + item.type + '">' + item.type + '</option>');
|
|
});
|
|
}
|
|
|
|
appendSinglePreAmpandBoosterType();
|
|
}
|
|
catch (e) {
|
|
console.log(e);
|
|
showMessage(alertType.Error, "KeyError:'elements', try again");
|
|
hideLoader();
|
|
}
|
|
}
|
|
|
|
function handleFileSelect(event) {
|
|
const reader = new FileReader()
|
|
reader.onload = handleFileLoad;
|
|
reader.readAsText(event.target.files[0])
|
|
}
|
|
|
|
function handleFileLoad(event) {
|
|
//document.getElementById('input_output').textContent = "";
|
|
//_import_json = document.getElementById('input_output').textContent = event.target.result;
|
|
_import_json = event.target.result;
|
|
importNetwork();
|
|
}
|
|
|
|
function importNode(index) {
|
|
|
|
//var nodeID = token();
|
|
var nodeDetails = "";
|
|
var shape = "";
|
|
var color = "";
|
|
var image = "";
|
|
var nodeSize = 0;
|
|
var font = "";
|
|
var transceiver_type = "";
|
|
var amp_type = "";
|
|
var amp_category = "";
|
|
var pre_amp_type = "";
|
|
var booster_type = "";
|
|
var category = "";
|
|
var roadm_type = "";
|
|
//amplifier properties
|
|
var gain_target = "0.0"
|
|
var tilt_target = "0.0";
|
|
var out_voa_target = "0.0"
|
|
var x = getRandomNumberBetween(-230, 648);
|
|
var y = getRandomNumberBetween(-230, 648);
|
|
|
|
try {
|
|
if (_import_json["network"][0].node[index]["metadata"]["Positions"]["X-co-ordinate"])
|
|
x = _import_json["network"][0].node[index]["metadata"]["Positions"]["X-co-ordinate"];
|
|
else
|
|
x = getRandomNumberBetween(-230, 648);
|
|
|
|
if (_import_json["network"][0].node[index]["metadata"]["Positions"]["Y-co-ordinate"])
|
|
y = _import_json["network"][0].node[index]["metadata"]["Positions"]["Y-co-ordinate"];
|
|
else
|
|
y = getRandomNumberBetween(-230, 648);
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
|
|
var roadmData = _import_json["network"][0].node[index]['tip-photonic-topology:roadm'];
|
|
var attenuatorData = _import_json["network"][0].node[index]['tip-photonic-topology:attenuator'];
|
|
var transceiverData = _import_json["network"][0].node[index]['tip-photonic-topology:transceiver'];
|
|
var amplifierData = _import_json["network"][0].node[index]['tip-photonic-topology:amplifier'];
|
|
var ILAData = _import_json["network"][0].node[index]['tip-photonic-topology:ila'];
|
|
var ramanData = _import_json["network"][0].node[index]['tip-photonic-topology:ramanamplifier'];
|
|
//nodeID = _import_json["network"][0].node[index]["node-id"]
|
|
|
|
|
|
if (roadmData) {
|
|
|
|
nodeDetails = configData.node[roadmJSON.node_type];
|
|
image = DIR + roadmJSON.image;
|
|
shape = roadmJSON.shape;
|
|
color = roadmJSON.color;
|
|
nodeSize = roadmJSON.size;
|
|
roadm_type = roadmData.model;
|
|
font = roadmJSON.font;
|
|
|
|
}
|
|
else if (transceiverData) {
|
|
nodeDetails = configData.node[transceiverJSON.node_type];
|
|
shape = transceiverJSON.shape;
|
|
color = transceiverJSON.color;
|
|
image = DIR + transceiverJSON.image;
|
|
transceiver_type = transceiverData.model;
|
|
nodeSize = transceiverJSON.size;
|
|
|
|
}
|
|
else if (attenuatorData) {
|
|
|
|
nodeDetails = configData.node[fusedJSON.node_type];
|
|
shape = fusedJSON.shape;
|
|
color = fusedJSON.color;
|
|
image = DIR + fusedJSON.image;
|
|
nodeSize = fusedJSON.size;
|
|
}
|
|
else if (amplifierData) {
|
|
nodeDetails = configData.node[amplifierJSON.amp_category];
|
|
shape = amplifierJSON.shape;
|
|
color = amplifierJSON.color;
|
|
image = DIR + amplifierJSON.image;
|
|
amp_type = amplifierData.model;
|
|
amp_category = nodeDetails.default.amp_category;
|
|
nodeSize = amplifierJSON.size;
|
|
gain_target = amplifierData['gain-target'];
|
|
tilt_target = amplifierData['tilt-target'];
|
|
out_voa_target = amplifierData['out-voa-target'];
|
|
//nodeDetails = configData.node[ILAJSON.amp_category];
|
|
//shape = ILAJSON.shape;
|
|
//color = ILAJSON.color;
|
|
//image = DIR + ILAJSON.image;
|
|
//pre_amp_type = amplifierData.model;
|
|
//booster_type = amplifierData.model;
|
|
//amp_category = nodeDetails.default.amp_category;
|
|
}
|
|
else if (ILAData) {
|
|
nodeDetails = configData.node[ILAJSON.amp_category];
|
|
shape = ILAJSON.shape;
|
|
color = ILAJSON.color;
|
|
image = DIR + ILAJSON.image;
|
|
pre_amp_type = ILAData.model;
|
|
booster_type = ILAData.model;
|
|
amp_category = nodeDetails.default.amp_category;
|
|
nodeSize = ILAJSON.size;
|
|
}
|
|
else if (ramanData) {
|
|
nodeDetails = configData.node[ramanampJSON.amp_category];
|
|
shape = ramanampJSON.shape;
|
|
color = ramanampJSON.color;
|
|
image = DIR + ramanampJSON.image;
|
|
amp_type = ramanData.model;
|
|
category = ramanData.category;
|
|
amp_category = nodeDetails.default.amp_category;
|
|
nodeSize = ramanampJSON.size;
|
|
}
|
|
else
|
|
return;
|
|
|
|
var result = nodeName(nodeDetails.default.node_type, nodeDetails.default.amp_category);
|
|
//var nodeLabel = nodeDetails.default.label + (nodelength == null ? "1" : nodelength).toString();
|
|
var number = result.nodelength;
|
|
//var label = nodeLabel;
|
|
|
|
var label = _import_json["network"][0].node[index]["node-id"];
|
|
var nodeID = label;
|
|
|
|
try {
|
|
if (_import_json["network"][0].node[index]["metadata"].location.city) {
|
|
label = _import_json["network"][0].node[index]["metadata"].location.city;
|
|
}
|
|
}
|
|
catch { }
|
|
|
|
var node_type = nodeDetails.default.node_type;
|
|
var node_degree = nodeDetails.default.node_degree;
|
|
var component_type = roadmJSON.component_type;
|
|
|
|
|
|
|
|
//network.body.data.nodes.add({
|
|
// id: nodeID, label: label, x: x, y: y, image: image, number: number,
|
|
// view: topologyView.Functional_View, hidden: false,
|
|
// shape: shape, color: color, size: nodeSize,
|
|
// node_type: node_type, node_degree: node_degree, component_type: component_type,
|
|
// roadm_type_pro: [],
|
|
// transceiver_type: transceiver_type,//transceiver
|
|
// amp_type: amp_type,//amplifier
|
|
// gain_target: gain_target,
|
|
// tilt_target: tilt_target,
|
|
// out_voa_target: out_voa_target,//end amplifier
|
|
// roadm_type: roadm_type, category: category,
|
|
// pre_amp_type: pre_amp_type, booster_type: booster_type, amp_category: amp_category//ILA
|
|
//});
|
|
|
|
|
|
importNodes.push({
|
|
id: nodeID,
|
|
label: label,
|
|
x: x, y: y, image: image, number: number,
|
|
view: topologyView.Functional_View, hidden: false,
|
|
shape: shape, color: color, size: nodeSize,
|
|
font: font,
|
|
node_type: node_type, node_degree: node_degree, component_type: component_type,
|
|
roadm_type_pro: [],
|
|
transceiver_type: transceiver_type,//transceiver
|
|
amp_type: amp_type,//amplifier
|
|
gain_target: gain_target,
|
|
tilt_target: tilt_target,
|
|
out_voa_target: out_voa_target,//end amplifier
|
|
roadm_type: roadm_type, category: category,
|
|
pre_amp_type: pre_amp_type, booster_type: booster_type, amp_category: amp_category//ILA
|
|
|
|
});
|
|
|
|
}
|
|
|
|
function importEdge(index) {
|
|
var edgeData = _import_json["network"][0]['ietf-network-topology:link'][index];
|
|
var to = edgeData["destination"]["dest-node"];
|
|
var from = edgeData["source"]["source-node"];
|
|
if (edgeData["tip-photonic-topology:fiber"]) {
|
|
tSpanLengh = "";
|
|
tType = "";
|
|
tConnector_in = "";
|
|
tConnector_out = "";
|
|
isSingleFiberMode = 1;
|
|
isDualFiberMode = 0;
|
|
var labelvalue = edgeData["link-id"];
|
|
var textvalue = labelvalue;
|
|
tType = edgeData["tip-photonic-topology:fiber"].type;
|
|
tSpanLength = edgeData["tip-photonic-topology:fiber"].length;
|
|
tConnector_in = edgeData["tip-photonic-topology:fiber"]["conn-att-in"];
|
|
tConnector_out = edgeData["tip-photonic-topology:fiber"]["conn-att-out"];
|
|
addFiberComponent(1, from, to, labelvalue, textvalue, true);
|
|
}
|
|
if (edgeData["tip-photonic-topology:patch"]) {
|
|
isSinglePatchMode = 1;
|
|
isDualPatchMode = 0;
|
|
var labelvalue = edgeData["link-id"];
|
|
var textvalue = labelvalue;
|
|
addPatchComponent(1, from, to, labelvalue, textvalue, true);
|
|
}
|
|
if (edgeData["tip-photonic-topology:service"]) {
|
|
isSinglePatchMode = 0;
|
|
isDualPatchMode = 0;
|
|
isAddService = 1;
|
|
var labelvalue = edgeData["link-id"];
|
|
var textvalue = labelvalue;
|
|
tBandwidth = edgeData["tip-photonic-topology:service"]["band-width"];
|
|
addServiceComponent(1, from, to, labelvalue, textvalue, true);
|
|
}
|
|
}
|
|
function getRandomNumberBetween(min, max) {
|
|
return Math.floor(Math.random() * (max - min + 1) + min);
|
|
}
|
|
var isImportJSON = false;
|
|
function importNetwork() {
|
|
|
|
try {
|
|
//network.setOptions(tempPhysics);
|
|
//network.body.data.edges.clear();
|
|
//network.body.data.nodes.clear();
|
|
importNodes = [];
|
|
importEdges = [];
|
|
//nodes = [];
|
|
//edges = [];
|
|
|
|
var networkData = _import_json["network"][0].node;
|
|
|
|
$.each(networkData, function (index, item) {
|
|
|
|
importNode(index);
|
|
|
|
//var asyncFunct = new Promise(function (resolve, reject) {
|
|
// importNode(index);
|
|
// resolve();
|
|
//});
|
|
//asyncFunct.then((result) => {
|
|
// $('#pg').text(index);
|
|
//});
|
|
|
|
});
|
|
|
|
//network.body.data.nodes.add(importNodes);
|
|
fiberSmooth = fiberJSON.options.smooth;
|
|
var fiber_config = configData[singleFiberJSON.fiber_category.replace(' ', '')].default;
|
|
var edgeData = _import_json["network"][0]['ietf-network-topology:link'];
|
|
|
|
$.each(edgeData, function (index, item) {
|
|
if (item["tip-photonic-topology:fiber"]) {
|
|
var labelvalue = item["link-id"];
|
|
fiber_Type = item["tip-photonic-topology:fiber"].type;
|
|
span_Length = item["tip-photonic-topology:fiber"].length;
|
|
connector_IN = item["tip-photonic-topology:fiber"]["conn-att-in"];
|
|
connector_OUT = item["tip-photonic-topology:fiber"]["conn-att-out"];
|
|
|
|
var loss_Coefficient = fiber_config.Loss_coefficient;;
|
|
span_Loss = parseFloat(span_Length * loss_Coefficient);
|
|
|
|
var tempColor;
|
|
|
|
if (fiber_Type == "" || parseFloat(span_Length) <= 0)
|
|
tempColor = singleFiberJSON.options.w_color;
|
|
else
|
|
tempColor = singleFiberJSON.options.color;
|
|
|
|
importEdges.push({
|
|
id: token(), from: item['source']['source-node'], to: item['destination']['dest-node'], label: labelvalue, text: labelvalue,
|
|
view: topologyView.Functional_View, hidden: false,
|
|
dashes: singleFiberJSON.dashes,
|
|
fiber_category: singleFiberJSON.fiber_category,
|
|
component_type: singleFiberJSON.component_type,
|
|
color: tempColor,
|
|
width: singleFiberJSON.width,
|
|
arrows: singleFiberJSON.options.arrows,
|
|
//font: singleFiberJSON.options.font,
|
|
smooth: fiberSmooth,
|
|
fiber_type: fiber_Type, span_length: span_Length,
|
|
loss_coefficient: loss_Coefficient, connector_in: connector_IN, connector_out: connector_OUT,
|
|
span_loss: span_Loss,
|
|
});
|
|
|
|
}
|
|
else if (item["tip-photonic-topology:patch"]) {
|
|
var labelvalue = item["link-id"];
|
|
importEdges.push({
|
|
id: token(), from: item['source']['source-node'], to: item['destination']['dest-node'], label: labelvalue, text: labelvalue,
|
|
dashes: singlePatchJSON.dashes, width: singlePatchJSON.width,
|
|
component_type: singlePatchJSON.component_type, patch_category: singlePatchJSON.patch_category,
|
|
color: singlePatchJSON.options.color, background: singlePatchJSON.options.background,
|
|
arrows: singlePatchJSON.options.arrows,
|
|
//font: singlePatchJSON.options.font,
|
|
smooth: singlePatchJSON.options.smooth,
|
|
view: topologyView.Functional_View, hidden: false,
|
|
});
|
|
}
|
|
else if (item["tip-photonic-topology:service"]) {
|
|
var labelvalue = item["link-id"];
|
|
bandwidth = item["tip-photonic-topology:service"]["band-width"];
|
|
importEdges.push({
|
|
id: token(), from: item['source']['source-node'], to: item['destination']['dest-node'], label: labelvalue, text: labelvalue,
|
|
dashes: serviceJSON.dashes, width: serviceJSON.width,
|
|
component_type: serviceJSON.component_type, color: serviceJSON.options.color, background: serviceJSON.options.background,
|
|
arrows: serviceJSON.options.arrows,
|
|
//font: serviceJSON.options.font,
|
|
smooth: fiberSmooth,
|
|
band_width: bandwidth
|
|
});
|
|
|
|
}
|
|
});
|
|
|
|
//var partition = 200;
|
|
//if (importEdges.length >= partition) {
|
|
// var tot = parseInt(importEdges.length / partition);
|
|
// var count = 0;;
|
|
// for (var i = 1; i <= tot; i++) {
|
|
// count = partition * i;
|
|
// if (i == 1) {
|
|
// setTimeout(
|
|
// network.body.data.edges.add(importEdges.slice(0, count))
|
|
// , 100);
|
|
|
|
// if (i == tot) {
|
|
// network.body.data.edges.add(importEdges.slice(count, importEdges.length));
|
|
// }
|
|
// }
|
|
// else {
|
|
// setTimeout(
|
|
// network.body.data.edges.add(importEdges.slice(count - partition, count))
|
|
// , 100);
|
|
|
|
// if (i == tot) {
|
|
// network.body.data.edges.add(importEdges.slice(count, importEdges.length));
|
|
// }
|
|
// }
|
|
// }
|
|
//}
|
|
//else
|
|
// network.body.data.edges.add(importEdges);
|
|
|
|
}
|
|
catch
|
|
{
|
|
|
|
}
|
|
|
|
draw(true);
|
|
//nodeRuleOnImportJSON();
|
|
}
|
|
|
|
|
|
function next500() {
|
|
network.body.data.edges.add(importEdges.slice(500, importEdges.length));
|
|
|
|
}
|
|
function getNodeData(data) {
|
|
data.forEach(function (elem, index, array) {
|
|
importNodes.push({
|
|
id: elem.id,
|
|
label: elem.label,
|
|
shape: elem.shape,
|
|
icon: elem.icon,
|
|
color: elem.color[0],
|
|
edges: elem.edges[0],
|
|
x: elem.x,
|
|
y: elem.y,
|
|
title: elem.title,
|
|
size: elem.size,
|
|
componentType: elem.componentType,
|
|
nodedegree: elem.nodedegree,
|
|
nodetype: elem.nodetype
|
|
|
|
});
|
|
});
|
|
|
|
////old node json
|
|
//data.forEach(function (elem, index, array) {
|
|
// nodes.push({
|
|
// id: elem.id,
|
|
// label: elem.label,
|
|
// shape: elem.shape,
|
|
// icon: elem.icon,
|
|
// color: elem.color,
|
|
// x: elem.x,
|
|
// y: elem.y,
|
|
// title: elem.title,
|
|
// });
|
|
//});
|
|
|
|
|
|
return new vis.DataSet(importNodes);
|
|
}
|
|
|
|
function getNodeById(data, id) {
|
|
for (var n = 0; n < data.length; n++) {
|
|
if (data[n].id == id) {
|
|
// double equals since id can be numeric or string
|
|
return data[n];
|
|
}
|
|
}
|
|
|
|
throw "cannot find id '" + id + "' in data";
|
|
}
|
|
|
|
function getEdgeData(data) {
|
|
|
|
data.forEach(function (elem) {
|
|
// add the connection
|
|
|
|
var fontstyle = {
|
|
align: '' + elem.options[0].font[0].align + '',
|
|
}
|
|
var arrows = {
|
|
to: {
|
|
enabled: elem.options[0].arrows[0].to[0].enabled,
|
|
type: elem.options[0].arrows[0].to[0].type,
|
|
},
|
|
from: {
|
|
enabled: elem.options[0].arrows[0].from[0].enabled,
|
|
type: elem.options[0].arrows[0].from[0].type,
|
|
},
|
|
}
|
|
|
|
var smooth = {
|
|
enabled: elem.options[0].smooth[0].enabled,
|
|
type: elem.options[0].smooth[0].type,
|
|
roundness: elem.options[0].smooth[0].roundness,
|
|
}
|
|
|
|
//var options = {
|
|
// font: fontstyle,
|
|
// arrows: arrows,
|
|
// smooth: smooth
|
|
//}
|
|
var fromlabel = "(" + network.body.data.nodes.get(elem.from).label + " -> " + network.body.data.nodes.get(elem.to).label + ")";
|
|
importEdges.push({
|
|
id: elem.id,
|
|
from: elem.from,
|
|
to: elem.to,
|
|
dashes: elem.dashes,
|
|
label: elem.label,
|
|
//options: options,
|
|
font: fontstyle,
|
|
arrows: arrows,
|
|
smooth: smooth,
|
|
color: elem.options[0].color[0].color,
|
|
componentType: elem.componentType,
|
|
// title: htmlTitle("uid : " + fromlabel + "\n" + "type : " + elem.componentType),
|
|
//label: elem.label,
|
|
//font: elem.font,
|
|
//arrows: elem.arrows,
|
|
|
|
});
|
|
|
|
|
|
});
|
|
|
|
//old json edges
|
|
//data.forEach(function (node) {
|
|
// // add the connection
|
|
// node.edges.forEach(function (connId, cIndex, conns) {
|
|
// edges.push({ from: node.id, to: connId });
|
|
// let cNode = getNodeById(data, connId);
|
|
|
|
// var elementConnections = cNode.edges;
|
|
|
|
// // remove the connection from the other node to prevent duplicate connections
|
|
// var duplicateIndex = elementConnections.findIndex(function (
|
|
// connection
|
|
// ) {
|
|
// return connection == node.id; // double equals since id can be numeric or string
|
|
// });
|
|
|
|
// if (duplicateIndex != -1) {
|
|
// elementConnections.splice(duplicateIndex, 1);
|
|
// }
|
|
// _edgesDB.insert({ "from": node.id, "to": connId, "edgeLength": 100 })
|
|
|
|
// });
|
|
|
|
//});
|
|
|
|
return new vis.DataSet(importEdges);
|
|
}
|
|
|
|
function objectToArray(obj) {
|
|
return Object.keys(obj).map(function (key) {
|
|
obj[key].id = key;
|
|
return obj[key];
|
|
});
|
|
}
|
|
function addConnections(elem, index) {
|
|
// need to replace this with a tree of the network, then get child direct children of the element
|
|
index = elem.id;
|
|
elem.edges = network.getConnectedNodes(index);
|
|
}
|
|
|
|
|
|
var storageData = {
|
|
nodes: [],
|
|
edges: []
|
|
}
|
|
function SaveNetwork() {
|
|
exportNetwork(true);
|
|
//storageData.nodes = nodes.get();
|
|
//storageData.edges = edges.get();
|
|
//localStorage.setItem("networkData", JSON.stringify(storageData));
|
|
}
|
|
function StorageClear() {
|
|
//localStorage.removeItem("networkData");
|
|
disableFiberService();
|
|
deletedata("1");
|
|
init();
|
|
}
|
|
|
|
var isDualFiberMode = 0;
|
|
var isSingleFiberMode = 0;
|
|
var addEdgeData = {
|
|
from: '',
|
|
to: ''
|
|
};
|
|
|
|
function addFiber() {
|
|
var srcNode = network.body.data.nodes.get(addEdgeData.from);
|
|
var DestNode = network.body.data.nodes.get(addEdgeData.to);
|
|
var isSrcOk = false;
|
|
var isDestOk = false;
|
|
//to restrict pre amp and boost amp on dualfiber connection
|
|
if (isDualFiberMode == 1) {
|
|
var msg = "";
|
|
if (srcNode.amp_category == amplifierJSON.amp_category) {
|
|
msg = srcNode.amp_category + " type : " + srcNode.label + " to ";
|
|
}
|
|
else {
|
|
isSrcOk = true;
|
|
if (srcNode.amp_category)
|
|
msg = srcNode.amp_category + " type : " + srcNode.label + " to ";
|
|
else
|
|
msg = srcNode.node_type + " type : " + srcNode.label + " to ";
|
|
}
|
|
if (DestNode.amp_category == amplifierJSON.amp_category) {
|
|
msg += DestNode.amp_category + " type : " + DestNode.label;
|
|
}
|
|
else {
|
|
isDestOk = true;
|
|
msg += DestNode.node_type + " type : " + DestNode.label;
|
|
}
|
|
|
|
if (!isSrcOk || !isDestOk) {
|
|
showMessage(alertType.Error, "<p>Cannot add " + dualFiberJSON.fiber_category + " from " + msg + '</p>');
|
|
addEdgeData = {
|
|
from: '',
|
|
to: ''
|
|
};
|
|
UnSelectAll();
|
|
return;
|
|
}
|
|
}
|
|
|
|
//to restrict amplifier on singelfiber connection
|
|
if (isSingleFiberMode == 1) {//comment for functional view
|
|
var msg = "";
|
|
//if (srcNode.amp_category == ILAJSON.amp_category) {
|
|
// msg = srcNode.amp_category + " type : " + srcNode.label + " to ";
|
|
//}
|
|
//else {
|
|
// isSrcOk = true;
|
|
// if (srcNode.amp_category)
|
|
// msg = srcNode.amp_category + " type : " + srcNode.label + " to ";
|
|
// else
|
|
// msg = srcNode.node_type + " type : " + srcNode.label + " to ";
|
|
//}
|
|
//if (DestNode.amp_category == ILAJSON.amp_category) {
|
|
// msg += DestNode.amp_category + " type : " + DestNode.label;
|
|
//}
|
|
//else {
|
|
// isDestOk = true;
|
|
// if (DestNode.amp_category)
|
|
// msg += DestNode.amp_category + " type : " + DestNode.label;
|
|
// else
|
|
// msg += DestNode.node_type + " type : " + DestNode.label;
|
|
//}
|
|
|
|
//if (!isSrcOk || !isDestOk) {
|
|
// alert("cannot add " + singleFiberJSON.fiber_category + " from " + msg);
|
|
// addEdgeData = {
|
|
// from: '',
|
|
// to: ''
|
|
// };
|
|
// UnSelectAll();
|
|
// return;
|
|
//}
|
|
|
|
//if (srcNode.node_type == transceiverJSON.node_type) {
|
|
// if (DestNode.node_type != transceiverJSON.node_type && DestNode.node_type != roadmJSON.node_type) {
|
|
// var nodetype = DestNode.node_type;
|
|
// if (DestNode.node_type == fusedJSON.node_type)
|
|
// nodetype = 'Attenuator';
|
|
// else if (DestNode.node_type == amplifierJSON.node_type)
|
|
// nodetype = DestNode.amp_category;
|
|
|
|
// msg = "We cannot add " + singleFiberJSON.component_type + " from : " + srcNode.node_type + ' - ' + srcNode.label + ", to : " + nodetype + ' - ' + DestNode.label;
|
|
// showMessage(alertType.Error, msg);
|
|
// addEdgeData = {
|
|
// from: '',
|
|
// to: ''
|
|
// };
|
|
// UnSelectAll();
|
|
// network.addEdgeMode();
|
|
// return;
|
|
// }
|
|
//}
|
|
//else if (DestNode.node_type == transceiverJSON.node_type) {
|
|
// if (srcNode.node_type != transceiverJSON.node_type && srcNode.node_type != roadmJSON.node_type) {
|
|
// var nodetype = srcNode.node_type;
|
|
// if (srcNode.node_type == fusedJSON.node_type)
|
|
// nodetype = 'Attenuator';
|
|
// else if (srcNode.node_type == amplifierJSON.node_type)
|
|
// nodetype = srcNode.amp_category;
|
|
|
|
// msg = "We cannot add " + singleFiberJSON.component_type + " from : " + nodetype + ' - ' + srcNode.label + ", to : " + DestNode.node_type + ' - ' + DestNode.label;
|
|
|
|
// showMessage(alertType.Error, msg);
|
|
// addEdgeData = {
|
|
// from: '',
|
|
// to: ''
|
|
// };
|
|
// UnSelectAll();
|
|
// network.addEdgeMode();
|
|
// return;
|
|
// }
|
|
//}
|
|
|
|
}
|
|
|
|
var labelvalue = getLabel(addEdgeData.from, addEdgeData.to, singleFiberJSON.component_type);
|
|
var textvalue = roadmJSON.node_type + "- [ " + network.body.data.nodes.get(addEdgeData.from).label + ' - ' + network.body.data.nodes.get(addEdgeData.to).label + " ]";
|
|
addFiberComponent(1, addEdgeData.from, addEdgeData.to, labelvalue, textvalue, false);
|
|
addEdgeData = {
|
|
from: '',
|
|
to: ''
|
|
};
|
|
UnSelectAll();
|
|
network.addEdgeMode();
|
|
}
|
|
function dualFiberMode() {
|
|
UnSelectAll();
|
|
isDualFiberMode = 1;
|
|
isSingleFiberMode = 0;
|
|
isAddService = 0;
|
|
isSinglePatchMode = 0;
|
|
isDualPatchMode = 0;
|
|
addEdgeData = {
|
|
from: '',
|
|
to: ''
|
|
};
|
|
}
|
|
function singleFiberMode() {
|
|
UnSelectAll();
|
|
isSingleFiberMode = 1;
|
|
isDualFiberMode = 0;
|
|
isAddService = 0;
|
|
isDualPatchMode = 0;
|
|
isSinglePatchMode = 0;
|
|
addEdgeData = {
|
|
from: '',
|
|
to: ''
|
|
};
|
|
}
|
|
|
|
var isAddService = 0;
|
|
var addServiceData = {
|
|
from: '',
|
|
to: ''
|
|
};
|
|
|
|
var isDualPatchMode = 0;
|
|
var isSinglePatchMode = 0;
|
|
var addPatchData = {
|
|
from: '',
|
|
to: ''
|
|
};
|
|
|
|
function addService() {
|
|
|
|
var fromDetails = network.body.data.nodes.get(addServiceData.from);
|
|
var toDetails = network.body.data.nodes.get(addServiceData.to);
|
|
var transNode = transceiverJSON.node_type.toString().toLowerCase();
|
|
//service should be add between only two transceiver
|
|
if (fromDetails.node_type == transceiverJSON.node_type && toDetails.node_type == transceiverJSON.node_type) {
|
|
//transceiver force checking
|
|
if (fromDetails.transceiver_type != "" && toDetails.transceiver_type != "") {
|
|
//same transceiver type checking
|
|
if (fromDetails.transceiver_type == toDetails.transceiver_type) {
|
|
var labelvalue = getLabel(addServiceData.from, addServiceData.to, serviceJSON.component_type);
|
|
//var labelvalue = serviceJSON.component_type + ' ' + network.body.data.nodes.get(addServiceData.from).number + ' - ' + network.body.data.nodes.get(addServiceData.to).number;
|
|
//2 transceiver must have fiber/patch connection
|
|
if (network.getConnectedEdges(addServiceData.from).length > 0 && network.getConnectedEdges(addServiceData.to).length > 0)
|
|
addServiceComponent(1, addServiceData.from, addServiceData.to, labelvalue, false);
|
|
else
|
|
showMessage(alertType.Error, "Source " + roadmJSON.component_type + " : " + fromDetails.label + " ,destination " + roadmJSON.component_type + " : " + toDetails.label + " should have " + dualFiberJSON.component_type + "/" + dualPatchJSON.component_type + " connection");
|
|
}
|
|
else
|
|
showMessage(alertType.Error, serviceJSON.component_type + " can be created only between " + transNode + " of same type");
|
|
}
|
|
else
|
|
showMessage(alertType.Error, serviceJSON.component_type + " can be created only when " + transNode + "s are forced");
|
|
|
|
}
|
|
else {
|
|
showMessage(alertType.Error, "The " + serviceJSON.component_type + " should be between 2 " + transNode + " sites");
|
|
}
|
|
addServiceData = {
|
|
from: '',
|
|
to: ''
|
|
};
|
|
UnSelectAll();
|
|
|
|
}
|
|
function addServiceMode() {
|
|
UnSelectAll();
|
|
isAddService = 1;
|
|
isDualFiberMode = 0;
|
|
isSingleFiberMode = 0;
|
|
isSinglePatchMode = 0;
|
|
isDualPatchMode = 0;
|
|
addServiceData = {
|
|
from: '',
|
|
to: ''
|
|
};
|
|
}
|
|
|
|
function addDualPatch() {
|
|
|
|
var fromDetails = network.body.data.nodes.get(addPatchData.from);
|
|
var toDetails = network.body.data.nodes.get(addPatchData.to);
|
|
if ((fromDetails.node_type == transceiverJSON.node_type && toDetails.node_type == roadmJSON.node_type) || (fromDetails.node_type == roadmJSON.node_type && toDetails.node_type == transceiverJSON.node_type)) {
|
|
|
|
var labelvalue = dualPatchJSON.component_type + ' ' + network.body.data.nodes.get(addPatchData.from).number + ' - ' + network.body.data.nodes.get(addPatchData.to).number;
|
|
addPatchComponent(1, addPatchData.from, addPatchData.to, labelvalue, labelvalue, false);
|
|
}
|
|
else {
|
|
showMessage(alertType.Error, "The " + dualPatchJSON.component_type + " should be between " + transceiverJSON.node_type + " and " + roadmJSON.node_type + " sites");
|
|
}
|
|
addPatchData = {
|
|
from: '',
|
|
to: ''
|
|
};
|
|
UnSelectAll();
|
|
network.addEdgeMode();
|
|
|
|
}
|
|
function addSinglePatch() {
|
|
|
|
|
|
var srcNode = network.body.data.nodes.get(addPatchData.from);
|
|
var DestNode = network.body.data.nodes.get(addPatchData.to);
|
|
|
|
//if (srcNode.node_type == transceiverJSON.node_type) {
|
|
// if (DestNode.node_type != transceiverJSON.node_type && DestNode.node_type != roadmJSON.node_type) {
|
|
// var nodetype = DestNode.node_type;
|
|
// if (DestNode.node_type == fusedJSON.node_type)
|
|
// nodetype = 'Attenuator';
|
|
// else if (DestNode.node_type == amplifierJSON.node_type)
|
|
// nodetype = DestNode.amp_category;
|
|
|
|
// msg = "We cannot add " + singlePatchJSON.component_type + " from : " + srcNode.node_type + ' - ' + srcNode.label + ", to : " + nodetype + ' - ' + DestNode.label;
|
|
// showMessage(alertType.Error, msg);
|
|
// addEdgeData = {
|
|
// from: '',
|
|
// to: ''
|
|
// };
|
|
// UnSelectAll();
|
|
// network.addEdgeMode();
|
|
// return;
|
|
// }
|
|
//}
|
|
//else if (DestNode.node_type == transceiverJSON.node_type) {
|
|
// if (srcNode.node_type != transceiverJSON.node_type && srcNode.node_type != roadmJSON.node_type) {
|
|
// var nodetype = srcNode.node_type;
|
|
// if (srcNode.node_type == fusedJSON.node_type)
|
|
// nodetype = 'Attenuator';
|
|
// else if (srcNode.node_type == amplifierJSON.node_type)
|
|
// nodetype = srcNode.amp_category;
|
|
|
|
// msg = "We cannot add " + singlePatchJSON.component_type + " from : " + nodetype + ' - ' + srcNode.label + ", to : " + DestNode.node_type + ' - ' + DestNode.label;
|
|
|
|
// showMessage(alertType.Error, msg);
|
|
// addEdgeData = {
|
|
// from: '',
|
|
// to: ''
|
|
// };
|
|
// UnSelectAll();
|
|
// network.addEdgeMode();
|
|
// return;
|
|
// }
|
|
//}
|
|
|
|
|
|
var labelvalue = getLabel(addPatchData.from, addPatchData.to, singlePatchJSON.component_type);
|
|
//var labelvalue = dualPatchJSON.component_type + ' ' + network.body.data.nodes.get(addPatchData.from).number + ' - ' + network.body.data.nodes.get(addPatchData.to).number;
|
|
addPatchComponent(1, addPatchData.from, addPatchData.to, labelvalue, labelvalue, false);
|
|
|
|
addPatchData = {
|
|
from: '',
|
|
to: ''
|
|
};
|
|
UnSelectAll();
|
|
network.addEdgeMode();
|
|
}
|
|
|
|
function dualPatchMode() {
|
|
UnSelectAll();
|
|
isDualPatchMode = 1;
|
|
isSinglePatchMode = 0;
|
|
isAddService = 0;
|
|
isDualFiberMode = 0;
|
|
isSingleFiberMode = 0;
|
|
addPatchData = {
|
|
from: '',
|
|
to: ''
|
|
};
|
|
}
|
|
function singlePatchMode() {
|
|
UnSelectAll();
|
|
isDualPatchMode = 0;
|
|
isSinglePatchMode = 1;
|
|
isAddService = 0;
|
|
isDualFiberMode = 0;
|
|
isSingleFiberMode = 0;
|
|
addPatchData = {
|
|
from: '',
|
|
to: ''
|
|
};
|
|
}
|
|
|
|
var copiedNodeID;
|
|
function copyNodePro(nodeID, callback) {
|
|
var isOk = false;
|
|
var nodeDetails = network.body.data.nodes.get(nodeID);
|
|
if (nodeDetails.node_type == roadmJSON.node_type) {
|
|
if (!nodeDetails.roadm_type && nodeDetails.roadm_type == "")
|
|
isOk = true;
|
|
|
|
}
|
|
if (nodeDetails.node_type == transceiverJSON.node_type) {
|
|
if (!nodeDetails.transceiver_type && nodeDetails.transceiver_type == "")
|
|
isOk = true;
|
|
}
|
|
if (nodeDetails.node_type == amplifierJSON.node_type) {
|
|
if (nodeDetails.amp_category == amplifierJSON.amp_category) {
|
|
if (!nodeDetails.amp_type && nodeDetails.amp_type == "")
|
|
isOk = true;
|
|
}
|
|
else if (nodeDetails.amp_category == ramanampJSON.amp_category) {
|
|
if ((!nodeDetails.amp_type && nodeDetails.amp_type == "") || (!nodeDetails.category && nodeDetails.category == ""))
|
|
isOk = true;
|
|
}
|
|
}
|
|
|
|
if (isOk) {
|
|
showMessage(alertType.Error, "Template is empty");
|
|
return;
|
|
}
|
|
showHideDrawerandMenu();
|
|
isCopyPara = true;
|
|
copiedNodeID = nodeID;
|
|
}
|
|
|
|
function cancelPro(nodeId) {
|
|
clearCopiedData();
|
|
}
|
|
|
|
function applyRoadmPro(nodeID, roadm_type) {
|
|
network.body.data.nodes.update({
|
|
id: nodeID, roadm_type: roadm_type
|
|
});
|
|
realUpdate_Roadm(nodeID, roadm_type);
|
|
}
|
|
function applyTransPro(nodeID, node_type, trans_type) {
|
|
var id = nodeID;
|
|
var connectedEdges = network.getConnectedEdges(id);
|
|
var fromTransType = "";
|
|
var toTransType = "";
|
|
var isOk = true;
|
|
transceiverType = trans_type;
|
|
$.each(connectedEdges, function (index, item) {
|
|
|
|
if (!isOk)
|
|
return;
|
|
var edgeDetails = network.body.data.edges.get(item);
|
|
if (edgeDetails.component_type == serviceJSON.component_type) {
|
|
if (edgeDetails.from == id) {
|
|
|
|
fromTransType = transceiverType;
|
|
toTransType = network.body.data.nodes.get(edgeDetails.to).transceiver_type;
|
|
}
|
|
else if (edgeDetails.to == id) {
|
|
toTransType = transceiverType;
|
|
fromTransType = network.body.data.nodes.get(edgeDetails.from).transceiver_type;
|
|
}
|
|
|
|
if (toTransType != fromTransType) {
|
|
isOk = false;
|
|
showMessage(alertType.Error, serviceJSON.component_type + " can be created/updated only between " + transceiverJSON.node_type + " of same type");
|
|
return;
|
|
}
|
|
}
|
|
|
|
});
|
|
|
|
if (isOk) {
|
|
if (node_type == transceiverJSON.node_type) {
|
|
|
|
network.body.data.nodes.update({
|
|
id: id, transceiver_type: transceiverType
|
|
});
|
|
realUpdate_Transceiver(id, transceiverType);
|
|
|
|
|
|
}
|
|
}
|
|
return isOk;
|
|
}
|
|
function applyAmpPro(nodeID, amp_type) {
|
|
network.body.data.nodes.update({
|
|
id: nodeID, amp_type: amp_type
|
|
});
|
|
realUpdate_Amplifier(nodeID, amp_type);
|
|
}
|
|
function applyRamanAmpPro(nodeID, amp_type, category) {
|
|
network.body.data.nodes.update({
|
|
id: nodeID, amp_type: amp_type, category: category
|
|
});
|
|
realUpdate_RamanAmp(nodeID, amp_type);
|
|
|
|
}
|
|
function applyPro(nodes, callback) {
|
|
var isUpdated = false;
|
|
if (isCopyPara) {
|
|
var nodeDetails = network.body.data.nodes.get(copiedNodeID);
|
|
var preUpdateList = [];
|
|
removeNodeList = [];
|
|
for (var i = 0; i < nodes.length; i++) {
|
|
if (nodeDetails.node_type == roadmJSON.node_type && network.body.data.nodes.get(nodes[i]).node_type == nodeDetails.node_type) {
|
|
if (nodes.length > 1) {
|
|
if (network.body.data.nodes.get(nodes[i]).image == DIR + roadmJSON.h_image || network.body.data.nodes.get(nodes[i]).image == DIR + roadmJSON.fh_image) {
|
|
preUpdateList.push(network.body.data.nodes.get(nodes[i]));
|
|
applyRoadmPro(nodes[i], nodeDetails.roadm_type);
|
|
removeNodeList.push(network.body.data.nodes.get(nodes[i]));
|
|
}
|
|
}
|
|
else {
|
|
applyRoadmPro(nodes[i], nodeDetails.roadm_type);
|
|
var tdata = network.body.data.nodes.get(nodes[i]);
|
|
tdata.isUpdate = true;
|
|
tempUndo.push(tdata);
|
|
}
|
|
isUpdated = true;
|
|
|
|
}
|
|
else if (nodeDetails.node_type == transceiverJSON.node_type && network.body.data.nodes.get(nodes[i]).node_type == nodeDetails.node_type) {
|
|
if (nodes.length > 1) {
|
|
if (network.body.data.nodes.get(nodes[i]).image == DIR + transceiverJSON.h_image || network.body.data.nodes.get(nodes[i]).image == DIR + transceiverJSON.fh_image) {
|
|
var temptrans = network.body.data.nodes.get(nodes[i]);
|
|
isUpdated = applyTransPro(nodes[i], nodeDetails.node_type, nodeDetails.transceiver_type);
|
|
if (isUpdated) {
|
|
preUpdateList.push(temptrans);
|
|
removeNodeList.push(network.body.data.nodes.get(nodes[i]));
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
isUpdated = applyTransPro(nodes[i], nodeDetails.node_type, nodeDetails.transceiver_type);
|
|
var tdata = network.body.data.nodes.get(nodes[i]);
|
|
tdata.isUpdate = true;
|
|
tempUndo.push(tdata);
|
|
}
|
|
}
|
|
if (nodeDetails.node_type == amplifierJSON.node_type && network.body.data.nodes.get(nodes[i]).node_type == nodeDetails.node_type) {
|
|
if (nodeDetails.amp_category == amplifierJSON.amp_category && nodeDetails.amp_category == network.body.data.nodes.get(nodes[i]).amp_category) {
|
|
if (nodes.length > 1) {
|
|
if (network.body.data.nodes.get(nodes[i]).image == DIR + amplifierJSON.h_image || network.body.data.nodes.get(nodes[i]).image == DIR + amplifierJSON.fh_image) {
|
|
preUpdateList.push(network.body.data.nodes.get(nodes[i]));
|
|
applyAmpPro(nodes[i], nodeDetails.amp_type);
|
|
removeNodeList.push(network.body.data.nodes.get(nodes[i]));
|
|
}
|
|
}
|
|
else {
|
|
applyAmpPro(nodes[i], nodeDetails.amp_type);
|
|
var tdata = network.body.data.nodes.get(nodes[i]);
|
|
tdata.isUpdate = true;
|
|
tempUndo.push(tdata);
|
|
}
|
|
isUpdated = true;
|
|
}
|
|
else if (nodeDetails.amp_category == ramanampJSON.amp_category && nodeDetails.amp_category == network.body.data.nodes.get(nodes[i]).amp_category) {
|
|
if (nodes.length > 1) {
|
|
if (network.body.data.nodes.get(nodes[i]).image == DIR + ramanampJSON.h_image || network.body.data.nodes.get(nodes[i]).image == DIR + ramanampJSON.fh_image) {
|
|
preUpdateList.push(network.body.data.nodes.get(nodes[i]));
|
|
applyRamanAmpPro(nodes[i], nodeDetails.amp_type, nodeDetails.category);
|
|
removeNodeList.push(network.body.data.nodes.get(nodes[i]));
|
|
}
|
|
}
|
|
else {
|
|
applyRamanAmpPro(nodes[i], nodeDetails.amp_type, nodeDetails.category);
|
|
var tdata = network.body.data.nodes.get(nodes[i]);
|
|
tdata.isUpdate = true;
|
|
tempUndo.push(tdata);
|
|
}
|
|
|
|
isUpdated = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (removeNodeList.length > 0) {
|
|
var updateList = {
|
|
isMultiple: true,
|
|
isUpdate: true,
|
|
preList: preUpdateList,
|
|
list: removeNodeList
|
|
}
|
|
tempUndo.push(updateList);
|
|
}
|
|
|
|
//if (isUpdated)
|
|
// showMessage(alertType.Success, "Template applied successfully.");
|
|
clearCopiedData();
|
|
}
|
|
}
|
|
|
|
function clearCopiedData() {
|
|
isCopyPara = false;
|
|
copiedNodeID = "";
|
|
UnSelectAll();
|
|
$('#toast').toast('hide');
|
|
document.getElementById("templateMenu").style.display = "none";
|
|
$("#stepCreateTopology").click();
|
|
remove_NodeHighlight();
|
|
}
|
|
|
|
function copyNode(nodeID, callback) {
|
|
showHideDrawerandMenu();
|
|
isCopy = true;
|
|
document.getElementById("btnPasteNode").onclick = pasteNode.bind(
|
|
this,
|
|
nodeID,
|
|
callback
|
|
|
|
);
|
|
}
|
|
function pasteNode(nodeId) {
|
|
if (isCopy) {
|
|
isCopy = false;
|
|
var nodeID = token();
|
|
var nodeData = network.body.data.nodes.get(nodeId);
|
|
var nodeDetails = configData.node[nodeData.node_type];
|
|
var node_type = nodeData.node_type;
|
|
//insertNodeX = network.body.data.nodes[nodeId].x + 5;
|
|
//insertNodeY = network.body.data.nodes[nodeId].y + 5;
|
|
|
|
var result = nodeName(node_type, nodeData.amp_category);
|
|
|
|
nodelength = result.nodeLength
|
|
nodeLabel = result.label
|
|
nodeData.label = nodeLabel;
|
|
nodeData.number = nodelength;
|
|
|
|
if (node_type == roadmJSON.node_type) {
|
|
network.body.data.nodes.add({
|
|
id: nodeID, label: nodeData.label, x: insertNodeX, y: insertNodeY, image: DIR + roadmJSON.w_image, number: nodeData.number,
|
|
shape: roadmJSON.shape, color: roadmJSON.color,
|
|
font: roadmJSON.font,
|
|
size: roadmJSON.size,
|
|
view: $("#ddlNetworkView").val(), hidden: false,
|
|
roadm_type: nodeData.roadm_type,
|
|
node_type: nodeDetails.default.node_type, node_degree: nodeDetails.default.node_degree, component_type: roadmJSON.component_type,
|
|
roadm_type_pro: []
|
|
});
|
|
}
|
|
else if (node_type == fusedJSON.node_type) {
|
|
network.body.data.nodes.add({
|
|
id: nodeID, label: nodeData.label, x: insertNodeX, y: insertNodeY, image: DIR + fusedJSON.w_image, number: nodeData.number,
|
|
shape: fusedJSON.shape, color: fusedJSON.color,
|
|
//font: fusedJSON.font,
|
|
size: fusedJSON.size,
|
|
view: $("#ddlNetworkView").val(), hidden: false,
|
|
node_type: nodeDetails.default.node_type, node_degree: nodeDetails.default.node_degree, component_type: fusedJSON.component_type,
|
|
});
|
|
}
|
|
else if (node_type == transceiverJSON.node_type) {
|
|
network.body.data.nodes.add({
|
|
id: nodeID, label: nodeData.label, x: insertNodeX, y: insertNodeY, image: DIR + transceiverJSON.w_image, number: nodeData.number,
|
|
shape: transceiverJSON.shape, color: transceiverJSON.color,
|
|
//font: transceiverJSON.font,
|
|
size: transceiverJSON.size,
|
|
view: $("#ddlNetworkView").val(), hidden: false,
|
|
node_type: nodeDetails.default.node_type, node_degree: nodeDetails.default.node_degree, component_type: transceiverJSON.component_type,
|
|
transceiver_type: nodeData.transceiver_type
|
|
});
|
|
}
|
|
else if (node_type == ILAJSON.node_type) {
|
|
|
|
if (nodeData.amp_category == ILAJSON.amp_category) {
|
|
network.body.data.nodes.add({
|
|
id: nodeID, label: nodeData.label, x: insertNodeX, y: insertNodeY, image: DIR + ILAJSON.w_image, number: nodeData.number,
|
|
shape: ILAJSON.shape, color: ILAJSON.color,
|
|
//font: ILAJSON.font,
|
|
size: ILAJSON.size,
|
|
view: $("#ddlNetworkView").val(), hidden: false,
|
|
node_type: nodeDetails.default.node_type, node_degree: nodeDetails.default.node_degree, component_type: ILAJSON.component_type,
|
|
pre_amp_type: nodeData.pre_amp_type, booster_type: nodeData.booster_type, amp_category: nodeData.amp_category
|
|
});
|
|
}
|
|
else if (nodeData.amp_category == amplifierJSON.amp_category) {
|
|
network.body.data.nodes.add({
|
|
id: nodeID, label: nodeData.label, x: insertNodeX, y: insertNodeY, image: DIR + amplifierJSON.w_image, number: nodeData.number,
|
|
shape: amplifierJSON.shape, color: amplifierJSON.color,
|
|
//font: amplifierJSON.font,
|
|
size: amplifierJSON.size,
|
|
view: $("#ddlNetworkView").val(), hidden: false,
|
|
node_type: nodeDetails.default.node_type, node_degree: nodeDetails.default.node_degree, component_type: amplifierJSON.component_type,
|
|
amp_type: nodeData.amp_type, amp_category: nodeData.amp_category
|
|
});
|
|
}
|
|
else if (nodeData.amp_category == ramanampJSON.amp_category) {
|
|
network.body.data.nodes.add({
|
|
id: nodeID, label: nodeData.label, x: insertNodeX, y: insertNodeY, image: DIR + ramanampJSON.w_image, number: nodeData.number,
|
|
shape: ramanampJSON.shape, color: ramanampJSON.color,
|
|
//font: ramanampJSON.font,
|
|
size: ramanampJSON.size,
|
|
view: $("#ddlNetworkView").val(), hidden: false,
|
|
node_type: nodeDetails.default.node_type, node_degree: nodeDetails.default.node_degree, component_type: ramanampJSON.component_type,
|
|
amp_type: nodeData.amp_type, amp_category: nodeData.amp_category, category: nodeData.category
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
|
|
realUpdate();
|
|
document.getElementById("pasteMenu").style.display = "none";
|
|
UnSelectAll();
|
|
$("#stepCreateTopology").click();
|
|
tempUndo.push(network.body.data.nodes.get(nodeID));
|
|
}
|
|
}
|
|
function UnSelectAll() {
|
|
network.unselectAll();
|
|
remove_NodeHighlight();
|
|
}
|
|
|
|
function wholePage() {
|
|
html2canvas(document.body, {
|
|
onrendered: function (canvas) {
|
|
var img = canvas.toDataURL();
|
|
$("#result-image").attr('src', img).show();
|
|
|
|
canvas.toBlob(function (blob) {
|
|
saveAs(blob, "wholePage.png");
|
|
});
|
|
}
|
|
});
|
|
return false;
|
|
}
|
|
|
|
function networkPage() {
|
|
network.fit();
|
|
html2canvas(document.querySelector("#mynetwork"), {
|
|
onrendered: function (canvas) {
|
|
var img = canvas.toDataURL();
|
|
$("#result-image").attr('src', img).show();
|
|
|
|
canvas.toBlob(function (blob) {
|
|
saveAs(blob, "NetworkPage.png");
|
|
});
|
|
}
|
|
});
|
|
return false;
|
|
}
|
|
|
|
function disableFiberService() {
|
|
|
|
nodeMode = "";
|
|
isDualFiberMode = 0;
|
|
isSingleFiberMode = 0;
|
|
isAddService = 0;
|
|
isDualPatchMode = 0;
|
|
isSinglePatchMode = 0;
|
|
addEdgeData = {
|
|
from: '',
|
|
to: ''
|
|
};
|
|
addServiceData = {
|
|
from: '',
|
|
to: ''
|
|
};
|
|
addPatchData = {
|
|
from: '',
|
|
to: ''
|
|
};
|
|
}
|
|
|
|
function generateMatrix() {
|
|
$("#matrixDiv").empty();
|
|
var nodearray = network.body.data.nodes.get();
|
|
if (nodearray.length > 0) {
|
|
|
|
//$("#matrixDiv").append(table);
|
|
|
|
var tblheader = "";
|
|
var tblrow = "";
|
|
var ric = 2;
|
|
var ris = 2;
|
|
|
|
for (var i = 0; i < nodearray.length; i++) {
|
|
|
|
// let rdynamicid = "r1_" + rid;
|
|
let firstrowid = "r1_" + ric;
|
|
var hiddenField = "<input id=h" + firstrowid + " value=" + nodearray[i].id + " type=hidden />";
|
|
tblheader += "<th id=" + firstrowid + ">" + nodearray[i].label + " " + hiddenField + "</th>";
|
|
rdynamicid = "r" + ris + "_1";
|
|
|
|
var hiddenFieldL = "<input id=h" + rdynamicid + " value=" + nodearray[i].id + " type=hidden />";
|
|
tblrow += "<tr><td id=" + rdynamicid + ">" + nodearray[i].label + " " + hiddenFieldL + "</td>" + addEmptyRC(nodearray.length, "r" + ris + "_", i, nodearray[i].id) + "</tr>";
|
|
|
|
ric++;
|
|
ris++;
|
|
|
|
}
|
|
//$("#matrixDiv").append(tblheader);
|
|
//$("#matrixDiv").append(tblrow);
|
|
// tblheader += "</tr>";
|
|
//tblrow += "";
|
|
//table += tblheader+tblrow+"</table>"
|
|
var table = "<table id='matrixTable'><tr><th id=r1_1></th>" + tblheader + "</tr>" + tblrow + "</table>"
|
|
$("#matrixDiv").append(table);
|
|
//console.log(multiarr);
|
|
|
|
$('#matrixTable tr td').click(function () {
|
|
var cid = $(this).attr('id');
|
|
|
|
if (cid == undefined) {
|
|
return;
|
|
}
|
|
|
|
var arsplit = cid.split('_');
|
|
var sfirst = "#h" + arsplit[0] + "_1";
|
|
var ssecond = "#hr" + arsplit[1] + "_1";
|
|
var txtFrom = $(sfirst).val();
|
|
var txtTo = $(ssecond).val();
|
|
var otherDir = "#r" + arsplit[1] + "_" + arsplit[0].replace('r', '');
|
|
//console.log('cond ',txtFrom, txtTo);
|
|
if ($(this).text() == 'yes') {
|
|
|
|
var confirmation = confirm('Do you want to remove ?')
|
|
if (confirmation) {
|
|
var edgesarr = network.body.data.edges.get();
|
|
for (var i = 0; i < edgesarr.length; i++) {
|
|
|
|
//console.log(edgesarr[i].from, edgesarr[i].to);
|
|
//alert('edgefrom - '+edgesarr[i].from +', txtfrom - '+ txtFrom +', edgeto - '+ edgesarr[i].to +', txtTo - '+ txtTo);
|
|
if ((edgesarr[i].from == txtFrom && edgesarr[i].to == txtTo) || (edgesarr[i].from == txtTo && edgesarr[i].to == txtFrom)) {
|
|
//console.log('condition',edgesarr[i].from, edgesarr[i].to);
|
|
network.body.data.edges.remove(edgesarr[i].id)
|
|
//alert('fiber removed');
|
|
$(this).text('X');
|
|
$(otherDir).text('X');
|
|
$(this).removeClass('tdback');
|
|
$(otherDir).removeClass('tdback');
|
|
return;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
else
|
|
return;
|
|
}
|
|
|
|
//alert(cid);
|
|
//alert(sfirst + ', ' + ssecond);
|
|
$(this).text('yes');
|
|
$(otherDir).text('yes');
|
|
|
|
$(this).addClass('tdback');
|
|
$(otherDir).addClass('tdback');
|
|
|
|
var labelvalue = '[' + network.body.data.nodes.get(txtFrom).label + ' - ' + network.body.data.nodes.get(txtTo).label + ']';
|
|
network.body.data.edges.add({
|
|
id: token(), from: txtFrom, to: txtTo, label: labelvalue, font: { align: 'top' },
|
|
componentType: "fiber"
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
$("#myModal").show();
|
|
}
|
|
|
|
var multiarr = [];
|
|
function addEmptyRC(numberofRC, dyid, restrictRC, nodeid) {
|
|
var emptycol = "";
|
|
var ldid = 2;
|
|
var localnodearray = network.body.data.nodes.get();
|
|
for (var i = 0; i < numberofRC; i++) {
|
|
if (i == restrictRC)
|
|
emptycol += "<td></td>";
|
|
else {
|
|
let cll = restrictRC + '_' + i;
|
|
//var spanEle = "<Span id=" + cll + ">X</Span>";
|
|
let roid = dyid + ldid;
|
|
//var nodecol = network.getConnectedEdges(nodeid);
|
|
//var noderow = network.getConnectedEdges(localnodearray[i].id);
|
|
//console.log(nodeid, nodeEdgeLength.length)
|
|
//alert(nodecol.length + ', ' + noderow.length);
|
|
//console.log(nodecol.length + ', ' + noderow.length);
|
|
|
|
//console.log(checkfiberconnection(nodeid, localnodearray[i].id));
|
|
|
|
|
|
if (checkfiberconnection(nodeid, localnodearray[i].id))
|
|
emptycol += "<td style='cursor:pointer;' class='tdback' id=" + roid + ">yes</td>";
|
|
else
|
|
emptycol += "<td style='cursor:pointer;' id=" + roid + ">X</td>";
|
|
|
|
//var arrmultidata = nodeid + ',' + localnodearray[i].id;
|
|
//multiarr.push(arrmultidata);
|
|
}
|
|
|
|
ldid++;
|
|
}
|
|
return emptycol;
|
|
}
|
|
|
|
function checkfiberconnection(fromNode, toNode) {
|
|
var edgesarr = network.body.data.edges.get();
|
|
var flag = false;
|
|
for (var i = 0; i < edgesarr.length; i++) {
|
|
//console.log(edgesarr[i].from, edgesarr[i].to);
|
|
//alert('edgefrom - '+edgesarr[i].from +', txtfrom - '+ txtFrom +', edgeto - '+ edgesarr[i].to +', txtTo - '+ txtTo);
|
|
if ((edgesarr[i].from == fromNode && edgesarr[i].to == toNode) || (edgesarr[i].from == toNode && edgesarr[i].to == fromNode)) {
|
|
flag = true;
|
|
return true;
|
|
}
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
|
|
|
|
function getAllNode() {
|
|
$("#nodeDiv").empty();
|
|
var nodelist = network.body.data.nodes.get();
|
|
for (var i = 0; i < nodelist.length; i++) {
|
|
|
|
var topnode = "<button class='accordion'>" + nodelist[i].label + "</button>"
|
|
$("#nodeDiv").append(topnode);
|
|
var connodelist = network.getConnectedNodes(nodelist[i].id);
|
|
var spannode = "";
|
|
for (var j = 0; j < connodelist.length; j++) {
|
|
spannode += "<p style='padding-left:10px;'>" + network.body.data.nodes.get(connodelist[j]).label + "</p>";
|
|
|
|
}
|
|
spannode = "<div class='panel'>Connected Nodes : <br /><br />" + spannode + "</div>"
|
|
$("#nodeDiv").append(spannode);
|
|
}
|
|
$("#nodeModal").show();
|
|
|
|
var acc = document.getElementsByClassName("accordion");
|
|
var i;
|
|
|
|
for (i = 0; i < acc.length; i++) {
|
|
acc[i].addEventListener("click", function () {
|
|
this.classList.toggle("active");
|
|
var panel = this.nextElementSibling;
|
|
if (panel.style.display === "block") {
|
|
panel.style.display = "none";
|
|
} else {
|
|
panel.style.display = "block";
|
|
}
|
|
});
|
|
}
|
|
|
|
}
|
|
|
|
//Add fiber//cmode 1-add
|
|
function addFiberComponent(cmode, cfrom, cto, clabel, ctext, isImport) {
|
|
if (cmode == 1) {
|
|
|
|
var nodeDetails = network.body.data.nodes.get(cfrom);
|
|
|
|
//Transeiver and Roadm rule - restrict to add fiber between transeiver and roadm
|
|
var toNodeDetails = network.body.data.nodes.get(cto);
|
|
//if ((nodeDetails.node_type == roadmJSON.node_type && toNodeDetails.node_type == transceiverJSON.node_type) || (nodeDetails.node_type == transceiverJSON.node_type && toNodeDetails.node_type == roadmJSON.node_type)) {
|
|
// alert("cannot add " + dualFiberJSON.component_type + " from " + nodeDetails.node_type + " " + roadmJSON.component_type + " : " + nodeDetails.label + " ,to " + toNodeDetails.node_type + " " + roadmJSON.component_type + " : " + toNodeDetails.label);
|
|
// return;
|
|
//}
|
|
//end
|
|
|
|
var fiberID = token();
|
|
data.nodes.off("*", change_history_back);
|
|
data.edges.off("*", change_history_back);
|
|
|
|
//amplifier and attenuator fiber connection conditions - max limit 2
|
|
if (isDualFiberMode == 1)//removed restriction for single fiber mode, so check fiber mode
|
|
{
|
|
//add roadm list for from roadm node or ILA
|
|
if (nodeDetails.node_type == roadmJSON.node_type || nodeDetails.amp_category == ILAJSON.amp_category) {
|
|
arrRoadmTypePro = nodeDetails.roadm_type_pro ? nodeDetails.roadm_type_pro : [];
|
|
|
|
var roadm_label = "";
|
|
var roadm_type = "";
|
|
var pre_amp_type = "";
|
|
var booster_type = "";
|
|
if (nodeDetails.node_type == roadmJSON.node_type) {
|
|
roadm_label = ctext;
|
|
var roadm_config = configData.node[nodeDetails.node_type].default;
|
|
roadm_type = roadm_config.roadm_type;
|
|
pre_amp_type = roadm_config.pre_amp_type;
|
|
booster_type = roadm_config.booster_type;
|
|
}
|
|
if (nodeDetails.amp_category == ILAJSON.amp_category) {
|
|
roadm_label = ILAJSON.amp_category + "- [ " + network.body.data.nodes.get(cfrom).label + ' - ' + network.body.data.nodes.get(cto).label + " ]";;
|
|
var ILA_config = configData.node[nodeDetails.amp_category].default;
|
|
roadm_type = "";
|
|
pre_amp_type = ILA_config.pre_amp_type;//Amp A
|
|
booster_type = ILA_config.booster_type;//Amp B
|
|
}
|
|
|
|
|
|
|
|
var roadmTypePro = {
|
|
roadm_fiber_id: fiberID,
|
|
roadm_label: roadm_label,
|
|
roadm_type: roadm_type,
|
|
pre_amp_type: pre_amp_type,
|
|
booster_type: booster_type
|
|
};
|
|
|
|
arrRoadmTypePro.push(roadmTypePro);
|
|
network.body.data.nodes.update({
|
|
id: cfrom, roadm_type_pro: arrRoadmTypePro
|
|
});
|
|
}
|
|
//add roadm list to to roadm node or ILA
|
|
if (toNodeDetails.node_type == roadmJSON.node_type || toNodeDetails.amp_category == ILAJSON.amp_category) {
|
|
arrRoadmTypePro = toNodeDetails.roadm_type_pro ? toNodeDetails.roadm_type_pro : [];
|
|
|
|
var roadm_label = "";
|
|
var roadm_type = "";
|
|
var pre_amp_type = "";
|
|
var booster_type = "";
|
|
if (toNodeDetails.node_type == roadmJSON.node_type) {
|
|
roadm_label = roadmJSON.node_type + "- [ " + network.body.data.nodes.get(cto).label + ' - ' + network.body.data.nodes.get(cfrom).label + " ]";
|
|
var roadm_config = configData.node[toNodeDetails.node_type].default;
|
|
roadm_type = roadm_config.roadm_type;
|
|
pre_amp_type = roadm_config.pre_amp_type;
|
|
booster_type = roadm_config.booster_type;
|
|
}
|
|
if (toNodeDetails.amp_category == ILAJSON.amp_category) {
|
|
roadm_label = ILAJSON.amp_category + "- [ " + network.body.data.nodes.get(cto).label + ' - ' + network.body.data.nodes.get(cfrom).label + " ]";;
|
|
var ILA_config = configData.node[toNodeDetails.amp_category].default;
|
|
roadm_type = "";
|
|
pre_amp_type = ILA_config.pre_amp_type;//Amp A
|
|
booster_type = ILA_config.booster_type;//Amp B
|
|
}
|
|
|
|
|
|
|
|
var roadmTypePro = {
|
|
roadm_fiber_id: fiberID,
|
|
roadm_label: roadm_label,
|
|
roadm_type: roadm_type,
|
|
pre_amp_type: pre_amp_type,
|
|
booster_type: booster_type
|
|
};
|
|
|
|
arrRoadmTypePro.push(roadmTypePro);
|
|
network.body.data.nodes.update({
|
|
id: cto, roadm_type_pro: arrRoadmTypePro
|
|
});
|
|
}
|
|
|
|
if (nodeDetails.node_type == fusedJSON.node_type || nodeDetails.node_type == ILAJSON.node_type || toNodeDetails.node_type == fusedJSON.node_type || toNodeDetails.node_type == ILAJSON.node_type) {
|
|
var connectedEdges = network.getConnectedEdges(cfrom);
|
|
var fromCount = network.getConnectedEdges(cfrom).length;
|
|
var toCount = network.getConnectedEdges(cto).length;
|
|
//$.each(connectedEdges, function (index, item) {
|
|
// var fiber = network.body.data.edges.get(item);
|
|
// if (fiber.from == cfrom)
|
|
// fromCount++;
|
|
// if (fiber.to == cfrom)
|
|
// toCount++;
|
|
//});
|
|
|
|
var fromDegree = configData.node[nodeDetails.node_type].default.node_degree;
|
|
var toDegree = configData.node[toNodeDetails.node_type].default.node_degree;
|
|
var msg = "";
|
|
var isLimit = false;
|
|
if (fromCount >= fromDegree) {
|
|
isLimit = true;
|
|
if (nodeDetails.node_type == fusedJSON.node_type) {
|
|
msg = 'Attenuator ' + roadmJSON.component_type + ' : ' + nodeDetails.label + ' cannot have more than ' + fromDegree + ' ' + dualFiberJSON.component_type + ' connection';
|
|
//alert('Attenuator ' + roadmJSON.component_type + ' : ' + nodeDetails.label + ' cannot have more than ' + fromDegree+' '+dualFiberJSON.component_type+' connection');
|
|
}
|
|
else if (nodeDetails.node_type == ILAJSON.node_type) {
|
|
msg = nodeDetails.amp_category + ' ' + roadmJSON.component_type + ' : ' + nodeDetails.label + ' cannot have more than ' + fromDegree + ' ' + dualFiberJSON.component_type + ' connection';
|
|
//alert(nodeDetails.amp_category + ' ' + roadmJSON.component_type + ' : ' + nodeDetails.label + ' cannot have more than ' + fromDegree+' ' + dualFiberJSON.component_type +' connection');
|
|
}
|
|
|
|
}
|
|
if (toCount >= toDegree) {
|
|
if (isLimit)
|
|
msg += " and ";
|
|
isLimit = true;
|
|
if (toNodeDetails.node_type == fusedJSON.node_type) {
|
|
msg += 'Attenuator ' + roadmJSON.component_type + ' : ' + toNodeDetails.label + ' cannot have more than ' + toDegree + ' ' + dualFiberJSON.component_type + ' connection';
|
|
//alert('Attenuator ' + roadmJSON.component_type + ' : ' + nodeDetails.label + ' cannot have more than ' + toDegree+' '+dualFiberJSON.component_type+' connection');
|
|
}
|
|
else if (toNodeDetails.node_type == ILAJSON.node_type) {
|
|
msg += toNodeDetails.amp_category + ' ' + roadmJSON.component_type + ' : ' + toNodeDetails.label + ' cannot have more than ' + toDegree + ' ' + dualFiberJSON.component_type + ' connection';
|
|
//alert(nodeDetails.amp_category + ' ' + roadmJSON.component_type + ' : ' + nodeDetails.label + ' cannot have more than ' + toDegree+' ' + dualFiberJSON.component_type +' connection');
|
|
}
|
|
}
|
|
|
|
if (isLimit) {
|
|
showMessage(alertType.Error, msg);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
//end
|
|
|
|
data.nodes.on("*", change_history_back);
|
|
data.edges.on("*", change_history_back);
|
|
var fiberSmooth = multipleFiberService1(cfrom, cto);
|
|
if (!fiberSmooth)
|
|
fiberSmooth = fiberJSON.options.smooth;
|
|
|
|
var elabel = "";
|
|
if (isDualFiberMode == 1) {
|
|
var fiber_config = configData[dualFiberJSON.fiber_category.replace(' ', '')].default;
|
|
clabel = countFiberService(true, false, false, false, cfrom, cto) + '-' + clabel;
|
|
elabel = clabel;
|
|
network.body.data.edges.add({
|
|
id: fiberID, from: cfrom, to: cto, label: elabel, text: clabel, dashes: dualFiberJSON.dashes, fiber_category: dualFiberJSON.fiber_category,
|
|
component_type: dualFiberJSON.component_type, color: dualFiberJSON.options.color, background: dualFiberJSON.options.background,
|
|
arrows: dualFiberJSON.options.arrows,
|
|
//font: dualFiberJSON.options.font,
|
|
smooth: fiberSmooth,
|
|
width: dualFiberJSON.width,
|
|
view: topologyView.NE_View, hidden: false,
|
|
fiber_type: fiber_config.fiber_type, span_length: fiber_config.Span_length,
|
|
loss_coefficient: fiber_config.Loss_coefficient, connector_in: fiber_config.Connector_in, connector_out: fiber_config.Connector_out, span_loss: fiber_config.Span_loss,
|
|
RxToTxFiber: {
|
|
from: cto, to: cfrom, label: clabel, text: clabel, fiber_category: dualFiberJSON.fiber_category,
|
|
component_type: dualFiberJSON.component_type,
|
|
fiber_type: fiber_config.fiber_type, span_length: fiber_config.Span_length,
|
|
loss_coefficient: fiber_config.Loss_coefficient, connector_in: fiber_config.Connector_in, connector_out: fiber_config.Connector_out, span_loss: fiber_config.Span_loss,
|
|
}
|
|
|
|
});
|
|
}
|
|
if (isSingleFiberMode == 1) {
|
|
|
|
//var response = nodeRule(cfrom, cto, amplifierJSON.node_type);
|
|
|
|
//if (response.flag) {
|
|
// showMessage(alertType.Error, response.message);
|
|
// return;
|
|
//}
|
|
//response = nodeRule(cfrom, cto, fusedJSON.node_type);
|
|
|
|
//if (response.flag) {
|
|
// showMessage(alertType.Error, response.message);
|
|
// return;
|
|
//}
|
|
|
|
var flag = false;
|
|
var message = [];
|
|
var response = nodeRule(cfrom, cto, amplifierJSON.node_type);
|
|
if (response.flag) {
|
|
flag = true
|
|
message.push(response.message);
|
|
}
|
|
response = nodeRule(cfrom, cto, fusedJSON.node_type);
|
|
if (response.flag) {
|
|
flag = true;
|
|
message.push(response.message);
|
|
}
|
|
|
|
//response = nodeRule(cfrom, cto, transceiverJSON.node_type);
|
|
//if (response.flag) {
|
|
// flag = true;
|
|
// message.push(bullet + response.message);
|
|
//}
|
|
|
|
if (flag) {
|
|
showMessage(alertType.Error, message.join('. <br /><br /> '));
|
|
return;
|
|
}
|
|
|
|
var fiber_config = configData[singleFiberJSON.fiber_category.replace(' ', '')].default;
|
|
if (!isImport)
|
|
clabel = countFiberService(false, true, false, false, cfrom, cto) + '-' + clabel;
|
|
elabel = clabel;
|
|
var span_Length = fiber_config.Span_length;
|
|
var loss_Coefficient = fiber_config.Loss_coefficient;
|
|
var span_Loss = fiber_config.Span_loss;
|
|
var fiber_Type = fiber_config.fiber_type;
|
|
var connector_IN = fiber_config.Connector_in;
|
|
var connector_OUT = fiber_config.Connector_out;
|
|
|
|
if (isImport) {
|
|
span_Length = tSpanLength;
|
|
loss_Coefficient = loss_Coefficient;
|
|
span_Loss = parseFloat(span_Length * loss_Coefficient);
|
|
fiber_Type = tType;
|
|
connector_IN = tConnector_in;
|
|
connector_OUT = tConnector_out;
|
|
|
|
}
|
|
network.body.data.edges.add({
|
|
id: fiberID, from: cfrom, to: cto, label: elabel, text: clabel,
|
|
view: topologyView.Functional_View, hidden: false,
|
|
dashes: singleFiberJSON.dashes, fiber_category: singleFiberJSON.fiber_category,
|
|
component_type: singleFiberJSON.component_type,
|
|
color: singleFiberJSON.options.w_color,
|
|
width: singleFiberJSON.width,
|
|
background: singleFiberJSON.options.background,
|
|
arrows: singleFiberJSON.options.arrows,
|
|
//font: singleFiberJSON.options.font,
|
|
smooth: fiberSmooth,
|
|
fiber_type: fiber_Type, span_length: span_Length,
|
|
loss_coefficient: loss_Coefficient, connector_in: connector_IN, connector_out: connector_OUT,
|
|
span_loss: span_Loss,
|
|
});
|
|
|
|
realUpdate();
|
|
//var tedge = network.body.data.edges.get(fiberID);
|
|
//tedge.isUpdate = false;
|
|
//tempUndo.push(tedge);
|
|
nodeValidationInEdge(cfrom, cto);
|
|
|
|
|
|
}
|
|
|
|
data.nodes.off("*", change_history_back);
|
|
data.edges.off("*", change_history_back);
|
|
multipleFiberService(cfrom, cto);
|
|
data.nodes.on("*", change_history_back);
|
|
data.edges.on("*", change_history_back);
|
|
var tedge = network.body.data.edges.get(fiberID);
|
|
tedge.isUpdate = false;
|
|
tempUndo.push(tedge);
|
|
}
|
|
}
|
|
|
|
function multipleFiberService1(cfrom, cto) {
|
|
|
|
//if (network.getConnectedEdges(cfrom).length > 0)
|
|
// connectedFiber.push(network.getConnectedEdges(cfrom));
|
|
//if (network.getConnectedEdges(cto).length > 0)
|
|
// connectedFiber.push(network.getConnectedEdges(cto));
|
|
|
|
var connectedFiber = network.getConnectedEdges(cfrom);
|
|
//connectedFiber.push(network.getConnectedEdges(cto));
|
|
//var desFibers = network.getConnectedEdges(cto);
|
|
//$.each(desFibers, function (index, item) {
|
|
// connectedFiber.push(item);
|
|
//});
|
|
|
|
var fromFiberCount = 0;
|
|
var toFiberCount = 0;
|
|
var fiberCount = 0;
|
|
|
|
var fiberSmooth;
|
|
$.each(connectedFiber, function (index, item) {
|
|
var fiberDetails = network.body.data.edges.get(item);
|
|
if (fiberDetails.fiber_category == dualFiberJSON.fiber_category || fiberDetails.fiber_category == singleFiberJSON.fiber_category || fiberDetails.component_type == serviceJSON.component_type || fiberDetails.component_type == dualPatchJSON.component_type) {
|
|
fiberSmooth = singleFiberJSON.options.smooth;
|
|
if (fiberDetails.from == cfrom && fiberDetails.to == cto) {
|
|
fiberCount++;
|
|
if (fiberCount == 1) {
|
|
//if (fiberDetails.from == cto && fiberDetails.to == cfrom)
|
|
//{
|
|
fiberSmooth.roundness = "0." + fiberCount;
|
|
//}
|
|
//else
|
|
// fiberSmooth = fiberJSON.options.smooth;
|
|
}
|
|
else {
|
|
fromFiberCount++;
|
|
fiberSmooth.roundness = "0." + fiberCount;
|
|
}
|
|
}
|
|
if (connectedFiber.length == 1) {
|
|
if (fiberDetails.from == cto && fiberDetails.to == cfrom) {
|
|
fiberCount = 1;
|
|
fiberSmooth.roundness = "0." + connectedFiber.length;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
if (fiberCount > 0)
|
|
return fiberSmooth;
|
|
else
|
|
return fiberJSON.options.smooth;
|
|
}
|
|
|
|
function multipleFiberService(cfrom, cto) {
|
|
var connectedFiber = network.getConnectedEdges(cfrom);
|
|
connectedFiber.push(network.getConnectedEdges(cto));
|
|
var fromFiberCount = 0;
|
|
var toFiberCount = 0;
|
|
var fiberCount = 0;
|
|
|
|
$.each(connectedFiber, function (index, item) {
|
|
var fiberDetails = network.body.data.edges.get(item);
|
|
if (fiberDetails.fiber_category == dualFiberJSON.fiber_category || fiberDetails.fiber_category == singleFiberJSON.fiber_category || fiberDetails.component_type == serviceJSON.component_type || fiberDetails.component_type == dualPatchJSON.component_type) {
|
|
var fiberSmooth = singleFiberJSON.options.smooth;
|
|
if (fiberDetails.from == cfrom && fiberDetails.to == cto) {
|
|
fiberCount++;
|
|
|
|
if (fiberCount == 1) {
|
|
fiberSmooth = fiberJSON.options.smooth;
|
|
}
|
|
else {
|
|
fromFiberCount++;
|
|
fiberSmooth.roundness = "0." + fromFiberCount;
|
|
}
|
|
network.body.data.edges.update({
|
|
id: fiberDetails.id, smooth: fiberSmooth
|
|
|
|
});
|
|
}
|
|
if (fiberDetails.from == cto && fiberDetails.to == cfrom) {
|
|
fiberCount++;
|
|
fiberSmooth.roundness = "0." + toFiberCount;
|
|
if (fiberCount == 1) {
|
|
fiberSmooth = fiberJSON.options.smooth;
|
|
}
|
|
else {
|
|
toFiberCount++;
|
|
fiberSmooth.roundness = "0." + toFiberCount;
|
|
}
|
|
network.body.data.edges.update({
|
|
id: fiberDetails.id, smooth: fiberSmooth
|
|
|
|
});
|
|
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
function countFiberService(isdualfiber, issinglefiber, isservice, ispatch, cfrom, cto) {
|
|
var conCount = 1;
|
|
var connectedFiber = network.getConnectedEdges(cfrom);
|
|
connectedFiber.push(network.getConnectedEdges(cto));
|
|
$.each(connectedFiber, function (index, item) {
|
|
var fiberDetails = network.body.data.edges.get(item);
|
|
if (isdualfiber) {
|
|
if (fiberDetails.fiber_category == dualFiberJSON.fiber_category) {
|
|
if (fiberDetails.from == cfrom && fiberDetails.to == cto) {
|
|
conCount++;
|
|
}
|
|
}
|
|
}
|
|
if (issinglefiber) {
|
|
if (fiberDetails.fiber_category == singleFiberJSON.fiber_category) {
|
|
if (fiberDetails.from == cfrom && fiberDetails.to == cto) {
|
|
conCount++;
|
|
}
|
|
}
|
|
}
|
|
if (isservice) {
|
|
if (fiberDetails.component_type == serviceJSON.component_type) {
|
|
if (fiberDetails.from == cfrom && fiberDetails.to == cto) {
|
|
conCount++;
|
|
}
|
|
}
|
|
}
|
|
if (ispatch) {
|
|
if (fiberDetails.component_type == dualPatchJSON.component_type) {
|
|
if (fiberDetails.from == cfrom && fiberDetails.to == cto) {
|
|
conCount++;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
return conCount;
|
|
}
|
|
|
|
//Add service//cmode 1-add
|
|
function addServiceComponent(cmode, cfrom, cto, clabel, isImport) {
|
|
var serviceID = token();
|
|
if (cmode == 1) {
|
|
|
|
var bandwidth = configData[serviceJSON.component_type].default.band_width;
|
|
if (isImport)
|
|
bandwidth = tBandwidth;
|
|
else
|
|
clabel = countFiberService(false, false, true, false, cfrom, cto) + '-' + clabel;
|
|
|
|
elabel = clabel;
|
|
var fiberSmooth = multipleFiberService1(cfrom, cto);
|
|
if (!fiberSmooth)
|
|
fiberSmooth = fiberJSON.options.smooth;
|
|
network.body.data.edges.add({
|
|
id: serviceID, from: cfrom, to: cto, label: elabel, text: clabel, dashes: serviceJSON.dashes, width: serviceJSON.width,
|
|
component_type: serviceJSON.component_type, color: serviceJSON.options.color, background: serviceJSON.options.background,
|
|
arrows: serviceJSON.options.arrows,
|
|
//font: serviceJSON.options.font,
|
|
smooth: fiberSmooth,
|
|
band_width: bandwidth
|
|
});
|
|
data.nodes.off("*", change_history_back);
|
|
data.edges.off("*", change_history_back);
|
|
multipleFiberService(cfrom, cto);
|
|
data.nodes.on("*", change_history_back);
|
|
data.edges.on("*", change_history_back);
|
|
|
|
var tedge = network.body.data.edges.get(serviceID);
|
|
tedge.isUpdate = false;
|
|
tempUndo.push(tedge);
|
|
}
|
|
UnSelectAll();
|
|
network.addEdgeMode();
|
|
}
|
|
|
|
//Add service//cmode 1-add
|
|
function addPatchComponent(cmode, cfrom, cto, clabel, ctext, isImport) {
|
|
|
|
if (cmode == 1) {
|
|
var patchID = token();
|
|
if (!isImport)
|
|
clabel = countFiberService(false, false, false, true, cfrom, cto) + '-' + clabel;
|
|
|
|
elabel = clabel;
|
|
|
|
if (isSinglePatchMode == 1) {
|
|
|
|
//var response = nodeRule(cfrom, cto, amplifierJSON.node_type);
|
|
|
|
//if (response.flag) {
|
|
// showMessage(alertType.Error, response.message);
|
|
// return;
|
|
//}
|
|
//response = nodeRule(cfrom, cto, fusedJSON.node_type);
|
|
|
|
//if (response.flag) {
|
|
// showMessage(alertType.Error, response.message);
|
|
// return;
|
|
//}
|
|
|
|
|
|
var flag = false;
|
|
var message = [];
|
|
var response = nodeRule(cfrom, cto, amplifierJSON.node_type);
|
|
if (response.flag) {
|
|
flag = true
|
|
message.push(response.message);
|
|
}
|
|
|
|
response = nodeRule(cfrom, cto, fusedJSON.node_type);
|
|
if (response.flag) {
|
|
flag = true;
|
|
message.push(response.message);
|
|
}
|
|
|
|
//response = nodeRule(cfrom, cto, transceiverJSON.node_type);
|
|
//if (response.flag) {
|
|
// flag = true;
|
|
// message.push(bullet + response.message);
|
|
//}
|
|
|
|
if (flag) {
|
|
showMessage(alertType.Error, message.join('. <br /><br /> '));
|
|
return;
|
|
}
|
|
|
|
network.body.data.edges.add({
|
|
id: patchID, from: cfrom, to: cto, label: elabel, text: clabel,
|
|
dashes: singlePatchJSON.dashes, width: singlePatchJSON.width,
|
|
component_type: singlePatchJSON.component_type, patch_category: singlePatchJSON.patch_category,
|
|
color: singlePatchJSON.options.color, background: singlePatchJSON.options.background,
|
|
arrows: singlePatchJSON.options.arrows,
|
|
//font: singlePatchJSON.options.font,
|
|
smooth: singlePatchJSON.options.smooth,
|
|
view: topologyView.Functional_View, hidden: false,
|
|
});
|
|
|
|
nodeValidationInEdge(cfrom, cto);
|
|
}
|
|
if (isDualPatchMode == 1) {
|
|
//we cannot add more than 1 patch
|
|
isPatchAdded = false;
|
|
var connectedFiber = network.getConnectedEdges(cfrom);
|
|
connectedFiber.push(network.getConnectedEdges(cto));
|
|
$.each(connectedFiber, function (index, item) {
|
|
var fiberDetails = network.body.data.edges.get(item);
|
|
if (fiberDetails.component_type == dualPatchJSON.component_type) {
|
|
if ((fiberDetails.from == cfrom && fiberDetails.to == cto) || (fiberDetails.from == cto && fiberDetails.to == cfrom)) {
|
|
isPatchAdded = true;
|
|
return true;
|
|
}
|
|
}
|
|
});
|
|
|
|
if (isPatchAdded && !isImport) {
|
|
showMessage(alertType.Error, 'We cannot add more than 1 ' + dualPatchJSON.patch_category);
|
|
return;
|
|
}
|
|
//end
|
|
network.body.data.edges.add({
|
|
id: patchID, from: cfrom, to: cto, label: elabel, text: ctext,
|
|
dashes: dualPatchJSON.dashes, width: dualPatchJSON.width,
|
|
component_type: dualPatchJSON.component_type, patch_category: dualPatchJSON.patch_category,
|
|
color: dualPatchJSON.options.color, background: dualPatchJSON.options.background,
|
|
arrows: dualPatchJSON.options.arrows,
|
|
//font: dualPatchJSON.options.font,
|
|
smooth: dualPatchJSON.options.smooth,
|
|
view: topologyView.NE_View, hidden: false,
|
|
});
|
|
}
|
|
|
|
data.nodes.off("*", change_history_back);
|
|
data.edges.off("*", change_history_back);
|
|
multipleFiberService(cfrom, cto);
|
|
data.nodes.on("*", change_history_back);
|
|
data.edges.on("*", change_history_back);
|
|
|
|
var tedge = network.body.data.edges.get(patchID);
|
|
tedge.isUpdate = false;
|
|
tempUndo.push(tedge);
|
|
}
|
|
}
|
|
|
|
//check node have connection
|
|
function checkNodeConnection(from, to) {
|
|
var flag = false;
|
|
var fiberList = network.getConnectedEdges(from);
|
|
$.each(fiberList, function (index, item) {
|
|
var fiber = network.body.data.edges.get(item);
|
|
if ((fiber.from == from && fiber.to == to) || (fiber.from == to && fiber.to == from)) {
|
|
flag = true;
|
|
return;
|
|
}
|
|
});
|
|
return flag;
|
|
}
|
|
|
|
//check node have service connection
|
|
function checkNodeServiceConnection(from, to) {
|
|
var flag = false;
|
|
var fiberList = network.getConnectedEdges(from);
|
|
$.each(fiberList, function (index, item) {
|
|
|
|
var fiber = network.body.data.edges.get(item);
|
|
if (fiber.component_type == serviceJSON.component_type) {
|
|
if ((fiber.from == from && fiber.to == to) || (fiber.from == to && fiber.to == from)) {
|
|
flag = true;
|
|
return;
|
|
}
|
|
}
|
|
});
|
|
return flag;
|
|
}
|
|
|
|
//Add node nodeMode - 1-roadm, 2-ILA, 3=fused/attenuator, 4-transceiver,5-amplifier, 6- raman amplifier
|
|
function addNodes(data, callback) {
|
|
|
|
var nodeDetails = "";
|
|
var nodeShape = "";
|
|
var nodeColor = "";
|
|
var nodeFont = "";
|
|
var nodeSize = 0;
|
|
var amp_category = "";
|
|
if (nodeMode == nodeType.ROADM) {
|
|
nodeDetails = configData.node[roadmJSON.node_type];
|
|
data.image = DIR + roadmJSON.w_image;
|
|
nodeFont = roadmJSON.font;
|
|
nodeSize = roadmJSON.size;
|
|
data.font = nodeFont;
|
|
|
|
if ($("#ddlNetworkView").val() == topologyView.Functional_View)
|
|
data.roadm_type = nodeDetails.default.roadm_type;
|
|
|
|
}
|
|
else if (nodeMode == nodeType.ILA || nodeMode == nodeType.Attenuator || nodeMode == nodeType.Transceiver || nodeMode == nodeType.Amplifier || nodeMode == nodeType.RamanAmplifier) {
|
|
if (nodeMode == nodeType.ILA) {
|
|
nodeDetails = configData.node[ILAJSON.amp_category];
|
|
nodeShape = ILAJSON.shape;
|
|
nodeColor = ILAJSON.color;
|
|
nodeFont = ILAJSON.font;
|
|
data.image = DIR + ILAJSON.w_image;
|
|
data.pre_amp_type = nodeDetails.default.pre_amp_type;
|
|
data.booster_type = nodeDetails.default.booster_type;
|
|
data.amp_category = nodeDetails.default.amp_category;
|
|
nodeSize = ILAJSON.size;
|
|
}
|
|
else if (nodeMode == nodeType.Attenuator) {
|
|
nodeDetails = configData.node[fusedJSON.node_type];
|
|
nodeShape = fusedJSON.shape;
|
|
nodeColor = fusedJSON.color;
|
|
nodeFont = fusedJSON.font;
|
|
data.image = DIR + fusedJSON.w_image;
|
|
nodeSize = fusedJSON.size;
|
|
}
|
|
else if (nodeMode == nodeType.Transceiver) {
|
|
nodeDetails = configData.node[transceiverJSON.node_type];
|
|
nodeShape = transceiverJSON.shape;
|
|
nodeColor = transceiverJSON.color;
|
|
nodeFont = transceiverJSON.font;
|
|
data.image = DIR + transceiverJSON.w_image;
|
|
data.transceiver_type = nodeDetails.default.transceiver_type;
|
|
nodeSize = transceiverJSON.size;
|
|
}
|
|
else if (nodeMode == nodeType.Amplifier) {
|
|
nodeDetails = configData.node[amplifierJSON.amp_category];
|
|
nodeShape = amplifierJSON.shape;
|
|
nodeColor = amplifierJSON.color;
|
|
nodeFont = amplifierJSON.font;
|
|
data.image = DIR + amplifierJSON.w_image;
|
|
data.amp_type = nodeDetails.default.amp_type;
|
|
data.amp_category = nodeDetails.default.amp_category;
|
|
nodeSize = amplifierJSON.size;
|
|
}
|
|
else if (nodeMode == nodeType.RamanAmplifier) {
|
|
nodeDetails = configData.node[ramanampJSON.amp_category];
|
|
nodeShape = ramanampJSON.shape;
|
|
nodeColor = ramanampJSON.color;
|
|
nodeFont = ramanampJSON.font;
|
|
data.image = DIR + ramanampJSON.w_image;
|
|
data.amp_type = nodeDetails.default.amp_type;
|
|
data.amp_category = nodeDetails.default.amp_category;
|
|
data.category = nodeDetails.default.category;
|
|
nodeSize = ramanampJSON.size;
|
|
}
|
|
|
|
data.shape = nodeShape;
|
|
data.color = nodeColor;
|
|
data.size = nodeSize;
|
|
|
|
}
|
|
else
|
|
return;
|
|
|
|
|
|
var result = nodeName(nodeDetails.default.node_type, nodeDetails.default.amp_category);
|
|
|
|
var nodelength = result.nodeLength;
|
|
var nodeLabel = result.label;
|
|
|
|
//data.font = nodeFont;
|
|
data.id = token();
|
|
data.number = nodelength;
|
|
data.label = nodeLabel;
|
|
//data.id = nodeLable;
|
|
data.node_type = nodeDetails.default.node_type;
|
|
data.node_degree = nodeDetails.default.node_degree;
|
|
data.component_type = roadmJSON.component_type;
|
|
data.hidden = false;
|
|
data.isUpdate = false;
|
|
data.view = $("#ddlNetworkView").val();
|
|
callback(data);
|
|
|
|
realUpdate();
|
|
|
|
if (nodeMode == nodeType.ROADM || nodeMode == nodeType.ILA || nodeMode == nodeType.Attenuator || nodeMode == nodeType.Transceiver || nodeMode == nodeType.Amplifier || nodeMode == nodeType.RamanAmplifier)
|
|
network.addNodeMode();
|
|
tempUndo.push(network.body.data.nodes.get(data.id));
|
|
}
|
|
|
|
var nofNode = 1;
|
|
function dualFiberInsertNode(fiberID, node_type, callback) {
|
|
//var fiberDetails = edges.get(fiberID);
|
|
//var fromNode = network.body.nodes[fiberDetails.from];
|
|
//var toNode = network.body.nodes[fiberDetails.to];
|
|
|
|
//var length = 1 + nofNode;
|
|
|
|
//var newX = (toNode.x - fromNode.x) / length;
|
|
//var newY = (toNode.y - fromNode.y) / length;
|
|
|
|
//for (var i = 1; i < length; i++) {
|
|
// var xx = fromNode.x + (newX * i);
|
|
// var yy = fromNode.y + (newY * i);
|
|
// network.body.data.nodes.add({
|
|
// id: token(), label: 'site '+i, x:xx , y:yy , shape: 'dot',node_type:roadmJSON.node_type
|
|
// });
|
|
//}
|
|
|
|
|
|
var fiberDetails = network.body.data.edges.get(fiberID);
|
|
var fromNode = network.body.nodes[fiberDetails.from];
|
|
var toNode = network.body.nodes[fiberDetails.to];
|
|
|
|
|
|
var newX = (fromNode.x + toNode.x) / 2;
|
|
var newY = network.body.edges[fiberID].labelModule.size.yLine;
|
|
insertNodeX = newX;
|
|
insertNodeY = newY;
|
|
|
|
var nodeID = token();
|
|
nodeDetails = configData.node[node_type];
|
|
|
|
var result = nodeName(node_type, nodeDetails.default.amp_category);
|
|
|
|
var nodelength = result.nodeLength;
|
|
var nodeLabel = result.label;
|
|
|
|
var fiberStyle = network.body.data.edges.get(fiberID);
|
|
var smooth = fiberStyle.smooth;
|
|
var fiberDetails = network.body.data.edges.get(fiberID);
|
|
|
|
data.nodes.on("*", change_history_back);
|
|
data.edges.on("*", change_history_back);
|
|
|
|
|
|
if (node_type == roadmJSON.node_type) {
|
|
network.body.data.nodes.add({
|
|
id: nodeID, label: nodeLabel, x: insertNodeX, y: insertNodeY, image: DIR + roadmJSON.image, number: nodelength,
|
|
shape: roadmJSON.shape, color: roadmJSON.color,
|
|
font: roadmJSON.font,
|
|
size: roadmJSON.size,
|
|
view: $("#ddlNetworkView").val(), hidden: false,
|
|
node_type: nodeDetails.default.node_type, node_degree: nodeDetails.default.node_degree, component_type: roadmJSON.component_type,
|
|
});
|
|
}
|
|
else if (node_type == fusedJSON.node_type) {
|
|
network.body.data.nodes.add({
|
|
id: nodeID, label: nodeLabel, x: insertNodeX, y: insertNodeY, image: DIR + fusedJSON.image, number: nodelength,
|
|
shape: fusedJSON.shape, color: fusedJSON.color,
|
|
//font: fusedJSON.font,
|
|
size: fusedJSON.size,
|
|
view: $("#ddlNetworkView").val(), hidden: false,
|
|
node_type: nodeDetails.default.node_type, node_degree: nodeDetails.default.node_degree, component_type: fusedJSON.component_type,
|
|
});
|
|
}
|
|
else if (node_type == transceiverJSON.node_type) {
|
|
network.body.data.nodes.add({
|
|
id: nodeID, label: nodeLabel, x: insertNodeX, y: insertNodeY, image: DIR + transceiverJSON.image, number: nodelength,
|
|
shape: transceiverJSON.shape, color: transceiverJSON.color,
|
|
//font: transceiverJSON.font,
|
|
size: transceiverJSON.size,
|
|
view: $("#ddlNetworkView").val(), hidden: false,
|
|
node_type: nodeDetails.default.node_type, node_degree: nodeDetails.default.node_degree, component_type: transceiverJSON.component_type,
|
|
transceiver_type: nodeDetails.transceiver_type
|
|
});
|
|
}
|
|
else if (node_type == ILAJSON.amp_category) {
|
|
network.body.data.nodes.add({
|
|
id: nodeID, label: nodeLabel, x: insertNodeX, y: insertNodeY, image: DIR + ILAJSON.image, number: nodelength,
|
|
shape: ILAJSON.shape, color: ILAJSON.color,
|
|
//font: ILAJSON.font,
|
|
size: ILAJSON.size,
|
|
view: $("#ddlNetworkView").val(), hidden: false,
|
|
node_type: nodeDetails.default.node_type, node_degree: nodeDetails.default.node_degree, component_type: ILAJSON.component_type,
|
|
pre_amp_type: nodeDetails.default.pre_amp_type, booster_type: nodeDetails.default.booster_type, amp_category: nodeDetails.default.amp_category
|
|
});
|
|
}
|
|
data.nodes.off("*", change_history_back);
|
|
data.edges.off("*", change_history_back);
|
|
|
|
network.body.data.edges.remove(fiberID);
|
|
|
|
var labelvalue = dualFiberJSON.component_type + " " + network.body.data.nodes.get(fiberDetails.from).number + ' - ' + network.body.data.nodes.get(nodeID).number;
|
|
//var textvalue = roadmJSON.node_type + "- [ " + network.body.data.nodes.get(fiberDetails.from).label + ' - ' + network.body.data.nodes.get(nodeID).label + " ]";
|
|
labelvalue = countFiberService(true, false, false, false, fiberDetails.from, nodeID) + '-' + labelvalue;
|
|
|
|
var elabel = "";
|
|
elabel = labelvalue;
|
|
|
|
network.body.data.edges.add({
|
|
id: fiberID, from: fiberDetails.from, to: nodeID, label: elabel, text: labelvalue, dashes: dualFiberJSON.dashes, fiber_category: dualFiberJSON.fiber_category,
|
|
component_type: dualFiberJSON.component_type, color: dualFiberJSON.options.color, background: dualFiberJSON.options.background,
|
|
arrows: dualFiberJSON.options.arrows,
|
|
//font: dualFiberJSON.options.font,
|
|
smooth: smooth,
|
|
width: dualFiberJSON.width,
|
|
view: $("#ddlNetworkView").val(), hidden: false,
|
|
fiber_type: fiberDetails.fiber_type, span_length: fiberDetails.span_length,
|
|
loss_coefficient: fiberDetails.loss_coefficient, connector_in: fiberDetails.connector_in, connector_out: fiberDetails.connector_out, span_loss: fiberDetails.span_loss,
|
|
RxToTxFiber: {
|
|
from: nodeID, to: fiberDetails.from, fiber_category: fiberDetails.fiber_category, component_type: fiberDetails.component_type,
|
|
label: labelvalue, fiber_type: fiberDetails.RxToTxFiber.fiber_type, span_length: fiberDetails.RxToTxFiber.span_length,
|
|
loss_coefficient: fiberDetails.RxToTxFiber.loss_coefficient, connector_in: fiberDetails.RxToTxFiber.connector_in, connector_out: fiberDetails.RxToTxFiber.connector_out, span_loss: fiberDetails.RxToTxFiber.span_loss,
|
|
}
|
|
|
|
});
|
|
|
|
//add roadm list for left side fiber - new node
|
|
if (node_type == roadmJSON.node_type || node_type == ILAJSON.amp_category) {
|
|
|
|
var textvalue = node_type.toUpperCase() + "- [ " + nodeLabel + ' - ' + network.body.data.nodes.get(fiberDetails.from).label + " ]";
|
|
arrRoadmTypePro = [];
|
|
var roadm_label = textvalue;
|
|
var roadm_config = configData.node[node_type].default;
|
|
|
|
var roadm_type = "";
|
|
if (roadm_config.roadm_type)
|
|
roadm_type = roadm_config.roadm_type;
|
|
|
|
var pre_amp_type = roadm_config.pre_amp_type;
|
|
var booster_type = roadm_config.booster_type;
|
|
|
|
var roadmTypePro = {
|
|
roadm_fiber_id: fiberID,
|
|
roadm_label: roadm_label,
|
|
roadm_type: roadm_type,
|
|
pre_amp_type: pre_amp_type,
|
|
booster_type: booster_type
|
|
};
|
|
|
|
arrRoadmTypePro.push(roadmTypePro);
|
|
|
|
network.body.data.nodes.update({
|
|
id: nodeID, roadm_type_pro: arrRoadmTypePro
|
|
});
|
|
|
|
}
|
|
|
|
|
|
var newFiberID = token();
|
|
|
|
labelvalue = dualFiberJSON.component_type + " " + network.body.data.nodes.get(nodeID).number + ' - ' + network.body.data.nodes.get(fiberDetails.to).number;
|
|
//textvalue = roadmJSON.node_type + "- [ " + network.body.data.nodes.get(nodeID).label + ' - ' + network.body.data.nodes.get(fiberDetails.to).label + " ]";
|
|
labelvalue = countFiberService(true, false, false, false, nodeID, fiberDetails.to) + '-' + labelvalue;
|
|
elabel = labelvalue;
|
|
var fiber_config = configData[dualFiberJSON.fiber_category.replace(' ', '')].default;
|
|
network.body.data.edges.add({
|
|
id: newFiberID, from: nodeID, to: fiberDetails.to, label: elabel, text: labelvalue, dashes: dualFiberJSON.dashes, fiber_category: dualFiberJSON.fiber_category,
|
|
component_type: dualFiberJSON.component_type, color: dualFiberJSON.options.color, background: dualFiberJSON.options.background,
|
|
arrows: dualFiberJSON.options.arrows,
|
|
//font: dualFiberJSON.options.font,
|
|
smooth: smooth,
|
|
width: dualFiberJSON.width,
|
|
view: $("#ddlNetworkView").val(), hidden: false,
|
|
fiber_type: fiber_config.fiber_type, span_length: fiber_config.Span_length,
|
|
loss_coefficient: fiber_config.Loss_coefficient, connector_in: fiber_config.Connector_in, connector_out: fiber_config.Connector_out, span_loss: fiber_config.Span_loss,
|
|
|
|
RxToTxFiber: {
|
|
from: fiberDetails.to, to: nodeID, fiber_category: fiberDetails.fiber_category, component_type: fiberDetails.component_type,
|
|
label: labelvalue,
|
|
fiber_type: fiber_config.fiber_type, span_length: fiber_config.Span_length,
|
|
loss_coefficient: fiber_config.Loss_coefficient, connector_in: fiber_config.Connector_in, connector_out: fiber_config.Connector_out, span_loss: fiber_config.Span_loss,
|
|
}
|
|
|
|
});
|
|
|
|
|
|
//add roadm list for newly added fiber right side - new node
|
|
nodeDetails = network.body.data.nodes.get(nodeID);
|
|
if (node_type == roadmJSON.node_type || node_type == ILAJSON.amp_category) {
|
|
var textvalue = node_type.toUpperCase() + "- [ " + nodeLabel + ' - ' + network.body.data.nodes.get(fiberDetails.to).label + " ]";
|
|
arrRoadmTypePro = nodeDetails.roadm_type_pro ? nodeDetails.roadm_type_pro : [];
|
|
var roadm_label = textvalue;
|
|
var roadm_config = configData.node[node_type].default;
|
|
|
|
var roadm_type = "";
|
|
|
|
if (roadm_config.roadm_type)
|
|
roadm_type = roadm_config.roadm_type;
|
|
|
|
var pre_amp_type = roadm_config.pre_amp_type;
|
|
var booster_type = roadm_config.booster_type;
|
|
|
|
var roadmTypePro = {
|
|
roadm_fiber_id: newFiberID,
|
|
roadm_label: roadm_label,
|
|
roadm_type: roadm_type,
|
|
pre_amp_type: pre_amp_type,
|
|
booster_type: booster_type
|
|
};
|
|
|
|
arrRoadmTypePro.push(roadmTypePro);
|
|
|
|
network.body.data.nodes.update({
|
|
id: nodeID, roadm_type_pro: arrRoadmTypePro
|
|
});
|
|
|
|
}
|
|
|
|
//add roadm list for right side roadm node
|
|
nodeDetails = network.body.data.nodes.get(fiberDetails.to);
|
|
if (nodeDetails.node_type == roadmJSON.node_type || nodeDetails.amp_category == ILAJSON.amp_category) {
|
|
|
|
|
|
var textvalue = "";
|
|
var roadm_config = "";
|
|
var roadm_type = "";
|
|
|
|
if (nodeDetails.node_type == roadmJSON.node_type) {
|
|
textvalue = nodeDetails.node_type.toUpperCase() + "- [ " + network.body.data.nodes.get(fiberDetails.to).label + ' - ' + nodeLabel + " ]";
|
|
roadm_config = configData.node[nodeDetails.node_type].default;
|
|
roadm_type = roadm_config.roadm_type;
|
|
}
|
|
if (nodeDetails.amp_category == ILAJSON.amp_category) {
|
|
textvalue = nodeDetails.amp_category.toUpperCase() + "- [ " + network.body.data.nodes.get(fiberDetails.to).label + ' - ' + nodeLabel + " ]";
|
|
roadm_config = configData.node[nodeDetails.amp_category].default;
|
|
}
|
|
|
|
arrRoadmTypePro = nodeDetails.roadm_type_pro ? nodeDetails.roadm_type_pro : [];
|
|
var roadm_label = textvalue;
|
|
|
|
var pre_amp_type = roadm_config.pre_amp_type;
|
|
var booster_type = roadm_config.booster_type;
|
|
|
|
var roadmTypePro = {
|
|
roadm_fiber_id: newFiberID,
|
|
roadm_label: roadm_label,
|
|
roadm_type: roadm_type,
|
|
pre_amp_type: pre_amp_type,
|
|
booster_type: booster_type
|
|
};
|
|
|
|
arrRoadmTypePro.push(roadmTypePro);
|
|
|
|
network.body.data.nodes.update({
|
|
id: fiberDetails.to, roadm_type_pro: arrRoadmTypePro
|
|
});
|
|
|
|
}
|
|
|
|
document.getElementById("dualFiberMenu").style.display = "none";
|
|
data.nodes.on("*", change_history_back);
|
|
data.edges.on("*", change_history_back);
|
|
enableEdgeIndicator();
|
|
}
|
|
|
|
function singleFiberInsertNode(fiberID, node_type, callback) {
|
|
|
|
var fiberDetails = network.body.data.edges.get(fiberID);
|
|
var fromNode = network.body.nodes[fiberDetails.from];
|
|
var toNode = network.body.nodes[fiberDetails.to];
|
|
|
|
var newX = (fromNode.x + toNode.x) / 2;
|
|
var newY = network.body.edges[fiberID].labelModule.size.yLine;
|
|
insertNodeX = newX;
|
|
insertNodeY = newY;
|
|
|
|
var nodeID = token();
|
|
nodeDetails = configData.node[node_type];
|
|
|
|
var result = nodeName(node_type, nodeDetails.default.amp_category);
|
|
|
|
var nodelength = result.nodeLength;
|
|
var nodeLabel = result.label;
|
|
|
|
var fiberStyle = network.body.data.edges.get(fiberID);
|
|
var smooth = fiberStyle.smooth;
|
|
var fiberDetails = network.body.data.edges.get(fiberID);
|
|
|
|
data.nodes.on("*", change_history_back);
|
|
data.edges.on("*", change_history_back);
|
|
|
|
if (node_type == roadmJSON.node_type) {
|
|
network.body.data.nodes.add({
|
|
id: nodeID, label: nodeLabel, x: insertNodeX, y: insertNodeY, image: DIR + roadmJSON.w_image, number: nodelength,
|
|
shape: roadmJSON.shape, color: roadmJSON.color,
|
|
font: roadmJSON.font,
|
|
size: roadmJSON.size,
|
|
view: $("#ddlNetworkView").val(), hidden: false,
|
|
node_type: nodeDetails.default.node_type, node_degree: nodeDetails.default.node_degree, component_type: roadmJSON.component_type,
|
|
roadm_type: nodeDetails.default.roadm_type
|
|
});
|
|
}
|
|
else if (node_type == fusedJSON.node_type) {
|
|
network.body.data.nodes.add({
|
|
id: nodeID, label: nodeLabel, x: insertNodeX, y: insertNodeY, image: DIR + fusedJSON.image, number: nodelength,
|
|
shape: fusedJSON.shape, color: fusedJSON.color,
|
|
//font: fusedJSON.font,
|
|
size: fusedJSON.size,
|
|
view: $("#ddlNetworkView").val(), hidden: false,
|
|
node_type: nodeDetails.default.node_type, node_degree: nodeDetails.default.node_degree, component_type: fusedJSON.component_type,
|
|
});
|
|
}
|
|
else if (node_type == transceiverJSON.node_type) {
|
|
network.body.data.nodes.add({
|
|
id: nodeID, label: nodeLabel, x: insertNodeX, y: insertNodeY, image: DIR + transceiverJSON.w_image, number: nodelength,
|
|
shape: transceiverJSON.shape, color: transceiverJSON.color,
|
|
//font: transceiverJSON.font,
|
|
size: transceiverJSON.size,
|
|
view: $("#ddlNetworkView").val(), hidden: false,
|
|
node_type: nodeDetails.default.node_type, node_degree: nodeDetails.default.node_degree, component_type: transceiverJSON.component_type,
|
|
transceiver_type: nodeDetails.transceiver_type
|
|
});
|
|
}
|
|
else if (node_type == amplifierJSON.amp_category) {
|
|
network.body.data.nodes.add({
|
|
id: nodeID, label: nodeLabel, x: insertNodeX, y: insertNodeY, image: DIR + amplifierJSON.w_image, number: nodelength,
|
|
shape: amplifierJSON.shape, color: amplifierJSON.color,
|
|
//font: amplifierJSON.font,
|
|
size: amplifierJSON.size,
|
|
view: $("#ddlNetworkView").val(), hidden: false,
|
|
node_type: nodeDetails.default.node_type, node_degree: nodeDetails.default.node_degree, component_type: amplifierJSON.component_type,
|
|
//amp_type: nodeDetails.default.amp_type,
|
|
//amp_category: nodeDetails.default.amp_category
|
|
pre_amp_type: nodeDetails.default.pre_amp_type, booster_type: nodeDetails.default.booster_type, amp_category: nodeDetails.default.amp_category
|
|
});
|
|
}
|
|
else if (node_type == ramanampJSON.amp_category) {
|
|
network.body.data.nodes.add({
|
|
id: nodeID, label: nodeLabel, x: insertNodeX, y: insertNodeY, image: DIR + ramanampJSON.w_image, number: nodelength,
|
|
shape: ramanampJSON.shape, color: ramanampJSON.color,
|
|
//font: ramanampJSON.font,
|
|
size: ramanampJSON.size,
|
|
view: $("#ddlNetworkView").val(), hidden: false,
|
|
node_type: nodeDetails.default.node_type, node_degree: nodeDetails.default.node_degree, component_type: ramanampJSON.component_type,
|
|
amp_type: nodeDetails.default.amp_type,
|
|
amp_category: nodeDetails.default.amp_category,
|
|
category: nodeDetails.default.category
|
|
});
|
|
}
|
|
|
|
data.nodes.off("*", change_history_back);
|
|
data.edges.off("*", change_history_back);
|
|
|
|
//var tnode = network.body.data.nodes.get(nodeID);
|
|
//tnode.isUpdate = false;
|
|
//tempUndo.push(tnode);
|
|
|
|
//network.body.data.edges.add({
|
|
// id: token(), from: fiberDetails.fromId, to: nodeID, label: fiberDetails.label,smooth:smooth
|
|
//});
|
|
|
|
//network.body.data.edges.add({
|
|
// id: token(), from: nodeID, to: fiberDetails.toId, label: fiberDetails.label, smooth: smooth
|
|
//});
|
|
|
|
network.body.data.edges.remove(fiberID);
|
|
|
|
|
|
|
|
|
|
var labelvalue = getLabel(fiberDetails.from, nodeID, singleFiberJSON.component_type);
|
|
//var textvalue = roadmJSON.node_type + "- [ " + network.body.data.nodes.get(fiberDetails.from).label + ' - ' + network.body.data.nodes.get(nodeID).label + " ]";
|
|
labelvalue = countFiberService(false, true, false, false, fiberDetails.from, nodeID) + '-' + labelvalue;
|
|
var elabel = "";
|
|
elabel = labelvalue;
|
|
|
|
var tempcolor;
|
|
|
|
if (fiberDetails.fiber_type != null && parseFloat(fiberDetails.span_length) > 0)
|
|
tempcolor = singleFiberJSON.options.color;
|
|
else
|
|
tempcolor = singleFiberJSON.options.w_color;
|
|
|
|
network.body.data.edges.add({
|
|
id: fiberID, from: fiberDetails.from, to: nodeID, label: elabel, text: labelvalue, dashes: singleFiberJSON.dashes, fiber_category: singleFiberJSON.fiber_category,
|
|
component_type: singleFiberJSON.component_type, color: tempcolor, background: singleFiberJSON.options.background,
|
|
arrows: singleFiberJSON.options.arrows,
|
|
//font: singleFiberJSON.options.font,
|
|
smooth: smooth,
|
|
width: singleFiberJSON.width,
|
|
view: $("#ddlNetworkView").val(), hidden: false,
|
|
fiber_type: fiberDetails.fiber_type, span_length: fiberDetails.span_length,
|
|
loss_coefficient: fiberDetails.loss_coefficient, connector_in: fiberDetails.connector_in, connector_out: fiberDetails.connector_out, span_loss: fiberDetails.span_loss,
|
|
|
|
});
|
|
|
|
//add roadm list for left side fiber - new node -- code comment for functional view roadm will contain only roadm type
|
|
//if (node_type == roadmJSON.node_type || node_type == amplifierJSON.amp_category) {
|
|
// var textvalue = node_type.toUpperCase() + "- [ " + nodeLabel + ' - ' + network.body.data.nodes.get(fiberDetails.from).label + " ]";
|
|
// arrRoadmTypePro = [];
|
|
// var roadm_label = textvalue;
|
|
// var roadm_config = configData.node[node_type].default;
|
|
// if (roadm_config.roadm_type)
|
|
// roadm_type = roadm_config.roadm_type;
|
|
// var pre_amp_type = roadm_config.pre_amp_type;
|
|
// var booster_type = roadm_config.booster_type;
|
|
|
|
// var roadmTypePro = {
|
|
// roadm_fiber_id: fiberID,
|
|
// roadm_label: roadm_label,
|
|
// roadm_type: roadm_type,
|
|
// pre_amp_type: pre_amp_type,
|
|
// booster_type: booster_type
|
|
// };
|
|
|
|
// arrRoadmTypePro.push(roadmTypePro);
|
|
|
|
// network.body.data.nodes.update({
|
|
// id: nodeID, roadm_type_pro: arrRoadmTypePro
|
|
// });
|
|
|
|
//}
|
|
|
|
var newFiberID = token();
|
|
var labelvalue = getLabel(nodeID, fiberDetails.to, singleFiberJSON.component_type);
|
|
//labelvalue = dualFiberJSON.component_type + " " + network.body.data.nodes.get(nodeID).number + ' - ' + network.body.data.nodes.get(fiberDetails.to).number;
|
|
//textvalue = roadmJSON.node_type + "- [ " + network.body.data.nodes.get(nodeID).label + ' - ' + network.body.data.nodes.get(fiberDetails.to).label + " ]";
|
|
labelvalue = countFiberService(false, true, false, false, nodeID, fiberDetails.to) + '-' + labelvalue;
|
|
elabel = labelvalue;
|
|
|
|
var fiber_config = configData[singleFiberJSON.fiber_category.replace(' ', '')].default;
|
|
network.body.data.edges.add({
|
|
id: newFiberID, from: nodeID, to: fiberDetails.to, label: elabel, text: labelvalue, dashes: singleFiberJSON.dashes, fiber_category: singleFiberJSON.fiber_category,
|
|
component_type: singleFiberJSON.component_type, color: singleFiberJSON.options.w_color, background: singleFiberJSON.options.background,
|
|
arrows: singleFiberJSON.options.arrows,
|
|
//font: singleFiberJSON.options.font,
|
|
smooth: smooth,
|
|
width: singleFiberJSON.width,
|
|
view: $("#ddlNetworkView").val(), hidden: false,
|
|
fiber_type: fiber_config.fiber_type, span_length: fiber_config.Span_length,
|
|
loss_coefficient: fiber_config.Loss_coefficient, connector_in: fiber_config.Connector_in, connector_out: fiber_config.Connector_out, span_loss: fiber_config.Span_loss,
|
|
});
|
|
|
|
//add roadm list for newly added fiber right side - new node --- comment for functional view also roadm have only roadm type
|
|
nodeDetails = network.body.data.nodes.get(nodeID);
|
|
//if (node_type == roadmJSON.node_type || node_type == amplifierJSON.amp_category) {
|
|
// var textvalue = node_type.toUpperCase() + "- [ " + nodeLabel + ' - ' + network.body.data.nodes.get(fiberDetails.to).label + " ]";
|
|
// arrRoadmTypePro = nodeDetails.roadm_type_pro ? nodeDetails.roadm_type_pro : [];
|
|
// var roadm_label = textvalue;
|
|
// var roadm_config = configData.node[node_type].default;
|
|
// if (roadm_config.roadm_type)
|
|
// roadm_type = roadm_config.roadm_type;
|
|
// var pre_amp_type = roadm_config.pre_amp_type;
|
|
// var booster_type = roadm_config.booster_type;
|
|
|
|
// var roadmTypePro = {
|
|
// roadm_fiber_id: newFiberID,
|
|
// roadm_label: roadm_label,
|
|
// roadm_type: roadm_type,
|
|
// pre_amp_type: pre_amp_type,
|
|
// booster_type: booster_type
|
|
// };
|
|
|
|
// arrRoadmTypePro.push(roadmTypePro);
|
|
|
|
// network.body.data.nodes.update({
|
|
// id: nodeID, roadm_type_pro: arrRoadmTypePro
|
|
// });
|
|
|
|
//}
|
|
|
|
//add roadm list for right side roadm node -- commented for functional view also roadm have only roadm type
|
|
//nodeDetails = network.body.data.nodes.get(fiberDetails.to);
|
|
//if (network.body.data.nodes.get(fiberDetails.to).node_type == roadmJSON.node_type) {
|
|
// var textvalue = roadmJSON.node_type + "- [ " + network.body.data.nodes.get(fiberDetails.to).label + ' - ' + nodeLabel + " ]";
|
|
// arrRoadmTypePro = nodeDetails.roadm_type_pro ? nodeDetails.roadm_type_pro : [];
|
|
// var roadm_label = textvalue;
|
|
// var roadm_config = configData.node[node_type].default;
|
|
// var roadm_type = roadm_config.roadm_type;
|
|
// var pre_amp_type = roadm_config.pre_amp_type;
|
|
// var booster_type = roadm_config.booster_type;
|
|
|
|
// var roadmTypePro = {
|
|
// roadm_fiber_id: newFiberID,
|
|
// roadm_label: roadm_label,
|
|
// roadm_type: roadm_type,
|
|
// pre_amp_type: pre_amp_type,
|
|
// booster_type: booster_type
|
|
// };
|
|
|
|
// arrRoadmTypePro.push(roadmTypePro);
|
|
|
|
// network.body.data.nodes.update({
|
|
// id: fiberDetails.to, roadm_type_pro: arrRoadmTypePro
|
|
// });
|
|
|
|
//}
|
|
|
|
fiberDetails.isUpdate = false;
|
|
fiberDetails.isDelete = true;
|
|
tempUndo.push(fiberDetails);
|
|
|
|
nodeDetails.isUpdate = false;
|
|
tempUndo.push(nodeDetails);
|
|
|
|
fDetails = network.body.data.edges.get(fiberID);
|
|
fDetails.isUpdate = false;
|
|
tempUndo.push(fDetails);
|
|
|
|
|
|
nDetails = network.body.data.edges.get(newFiberID);
|
|
nDetails.isUpdate = false;
|
|
tempUndo.push(nDetails);
|
|
|
|
|
|
|
|
|
|
|
|
document.getElementById("singleFiberMenu").style.display = "none";
|
|
data.nodes.on("*", change_history_back);
|
|
data.edges.on("*", change_history_back);
|
|
realUpdate();
|
|
enableEdgeIndicator();
|
|
}
|
|
|
|
//start -- component edit, update, remove, clear
|
|
function roadmEdit(nodeID, callback) {
|
|
_roadmListDB().remove();
|
|
document.getElementById("roadmMenu").style.display = "none";
|
|
openDrawer('roadm');
|
|
var nodeDetails = network.body.data.nodes.get(nodeID[nodeID.length - 1]);
|
|
$("#txtRoadmName").val(nodeDetails.label);
|
|
$("#divRoadmPro").hide();
|
|
$("#divRoadmPro").empty();
|
|
$("#divRoadmType").hide();
|
|
if (nodeDetails.node_type == roadmJSON.node_type && $("#ddlNetworkView").val() == topologyView.NE_View) {
|
|
arrRoadmTypePro = nodeDetails.roadm_type_pro ? nodeDetails.roadm_type_pro : [];
|
|
_roadmListDB.insert(JSON.stringify(arrRoadmTypePro));
|
|
var connectedFiber = network.getConnectedEdges(nodeID);
|
|
|
|
$.each(connectedFiber, function (index, item) {
|
|
if (network.body.data.edges.get(item).component_type == dualFiberJSON.component_type)
|
|
loadRoadmType(item, nodeID[nodeID.length - 1], nodeDetails.node_type, "divRoadmPro");
|
|
});
|
|
}
|
|
else if (nodeDetails.node_type == roadmJSON.node_type && $("#ddlNetworkView").val() == topologyView.Functional_View) {
|
|
$("#divRoadmType").show();
|
|
|
|
if (nodeID.length > 1) {
|
|
$("#divRoadmName").hide();
|
|
$("#ddlRoadmType").val('');
|
|
$("#ddlRoadmType").addClass('input_error');
|
|
var matchCount = 1;
|
|
for (var i = 0; i < nodeID.length-1; i++) {
|
|
if (network.body.data.nodes.get(nodeID[i]).roadm_type == nodeDetails.roadm_type)
|
|
{
|
|
matchCount++;
|
|
}
|
|
}
|
|
if (matchCount == nodeID.length) {
|
|
if (nodeDetails.roadm_type) {
|
|
$("#ddlRoadmType").val(nodeDetails.roadm_type);
|
|
$("#ddlRoadmType").removeClass('input_error');
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
else {
|
|
$("#divRoadmName").show();
|
|
if (nodeDetails.roadm_type) {
|
|
$("#ddlRoadmType").removeClass('input_error');
|
|
$("#ddlRoadmType").val(nodeDetails.roadm_type);
|
|
}
|
|
else {
|
|
$("#ddlRoadmType").val('');
|
|
$("#ddlRoadmType").addClass('input_error');
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
document.getElementById("btnUpdateRoadm").onclick = updateRoadm.bind(
|
|
this,
|
|
nodeID,
|
|
callback
|
|
);
|
|
|
|
document.getElementById("btnCloseRoadm").onclick = clearRoadm.bind(
|
|
);
|
|
}
|
|
function updateRoadm(nodeID) {
|
|
removeNodeList = [];
|
|
if (nameLengthValidation("txtRoadmName")) {
|
|
var id = nodeID[nodeID.length - 1];
|
|
var label = $("#txtRoadmName").val().trim();
|
|
var node_type = network.body.data.nodes.get(id).node_type
|
|
var roadmtypeprodata = _roadmListDB().get();
|
|
if (node_type == roadmJSON.node_type && $("#ddlNetworkView").val() == topologyView.NE_View) {
|
|
|
|
$.each(roadmtypeprodata, function (index, item) {
|
|
var lddlroadmtype = "#" + eleroadmtype + item.roadm_fiber_id;
|
|
var lddlpreamptype = "#" + elepreamptype + item.roadm_fiber_id;
|
|
var lddlboostertype = "#" + eleboostertype + item.roadm_fiber_id;
|
|
var edgeDetails = network.body.data.edges.get(item.roadm_fiber_id);
|
|
var llabelname = node_type + "- [" + label + ' - ' + network.body.data.nodes.get(edgeDetails.to).label + ' ]'
|
|
_roadmListDB({ "roadm_fiber_id": item.roadm_fiber_id, }).update({
|
|
"roadm_label": llabelname, "roadm_type": $(lddlroadmtype).val(),
|
|
"pre_amp_type": $(lddlpreamptype).val(), "booster_type": $(lddlboostertype).val(),
|
|
});
|
|
});
|
|
roadmtypeprodata = _roadmListDB().get();
|
|
network.body.data.nodes.update({
|
|
id: id, label: label, roadm_type_pro: roadmtypeprodata
|
|
});
|
|
|
|
}
|
|
else if (node_type == roadmJSON.node_type && $("#ddlNetworkView").val() == topologyView.Functional_View) {
|
|
|
|
if ($("#ddlRoadmType").val() == null) {
|
|
showMessage(alertType.Error, 'Pleae select type');
|
|
$("#ddlRoadmType").addClass('input_error');
|
|
return;
|
|
}
|
|
else
|
|
$("#ddlRoadmType").removeClass('input_error');
|
|
|
|
|
|
var preUpdateList = [];
|
|
if (nodeID.length > 1) {
|
|
for (var i = 0; i < nodeID.length; i++) {
|
|
|
|
if (network.body.data.nodes.get(nodeID[i]).image == DIR + roadmJSON.h_image) {
|
|
|
|
preUpdateList.push(network.body.data.nodes.get(nodeID[i]));
|
|
network.body.data.nodes.update({
|
|
id: nodeID[i], roadm_type: $("#ddlRoadmType").val()
|
|
});
|
|
realUpdate_Roadm(nodeID[i], $("#ddlRoadmType").val());
|
|
|
|
var tdata = network.body.data.nodes.get(nodeID[i]);
|
|
//tdata.isUpdate = true;
|
|
removeNodeList.push(tdata);
|
|
}
|
|
}
|
|
if (removeNodeList.length > 0) {
|
|
var updateList = {
|
|
isMultiple: true,
|
|
isUpdate: true,
|
|
preList: preUpdateList,
|
|
list: removeNodeList
|
|
}
|
|
tempUndo.push(updateList);
|
|
}
|
|
|
|
} else {
|
|
network.body.data.nodes.update({
|
|
id: id, label: label, roadm_type: $("#ddlRoadmType").val()
|
|
});
|
|
realUpdate_Roadm(id, $("#ddlRoadmType").val());
|
|
|
|
var tdata = network.body.data.nodes.get(id);
|
|
tdata.isUpdate = true;
|
|
tempUndo.push(tdata);
|
|
}
|
|
|
|
|
|
|
|
//var roadmtype = $("#ddlRoadmType").val();
|
|
//var connectedEges = network.getConnectedEdges(id);
|
|
//var tempEdge = [];
|
|
//$.each(connectedEges, function (index, item) {
|
|
// if (network.body.data.edges.get(item).component_type != serviceJSON.component_type) {
|
|
// tempEdge.push(item);
|
|
// }
|
|
//});
|
|
|
|
//var fromCount = 0;
|
|
//var toCount = 0;
|
|
//for (i = 0; i < tempEdge.length; i++) {
|
|
// edgeDetails = network.body.data.edges.get(tempEdge[i]);
|
|
// if (edgeDetails.from == id)
|
|
// fromCount++;
|
|
// else if (edgeDetails.to == id)
|
|
// toCount++;
|
|
//}
|
|
|
|
//if (fromCount != toCount || (fromCount == 0 && toCount == 0)) {
|
|
// //addNodeHighlight(item);
|
|
// removeID = "#spanTF" + id.replace(/\s/g, '');
|
|
// $(removeID).remove();
|
|
//}
|
|
//else {
|
|
// if (roadmtype)
|
|
// removeSpanInError(id, true);
|
|
//}
|
|
|
|
}
|
|
clearRoadm();
|
|
}
|
|
|
|
}
|
|
function clearRoadm() {
|
|
$("#txtRoadmName").val('');
|
|
$("#divRoadmPro").empty();
|
|
$("#ddlRoadmType").val('');
|
|
closeDrawer('roadm');
|
|
_roadmListDB().remove();
|
|
UnSelectAll();
|
|
}
|
|
|
|
function realUpdate_Roadm(id, rtype) {
|
|
var roadmtype = rtype;
|
|
var connectedEges = network.getConnectedEdges(id);
|
|
var tempEdge = [];
|
|
$.each(connectedEges, function (index, item) {
|
|
if (network.body.data.edges.get(item).component_type != serviceJSON.component_type) {
|
|
tempEdge.push(item);
|
|
}
|
|
});
|
|
|
|
var fromCount = 0;
|
|
var toCount = 0;
|
|
for (i = 0; i < tempEdge.length; i++) {
|
|
edgeDetails = network.body.data.edges.get(tempEdge[i]);
|
|
if (edgeDetails.from == id)
|
|
fromCount++;
|
|
else if (edgeDetails.to == id)
|
|
toCount++;
|
|
}
|
|
|
|
if (fromCount != toCount || (fromCount == 0 && toCount == 0)) {
|
|
//addNodeHighlight(item);
|
|
removeID = "#spanTF" + id.replace(/\s/g, '');
|
|
$(removeID).remove();
|
|
}
|
|
else {
|
|
if (roadmtype)
|
|
removeSpanInError(id, true);
|
|
}
|
|
}
|
|
|
|
function attenuatorEdit(nodeID, callback) {
|
|
document.getElementById("attenuatorMenu").style.display = "none";
|
|
openDrawer('attenuator');
|
|
var nodeDetails = network.body.data.nodes.get(nodeID);
|
|
$("#txtAttenuatorName").val(nodeDetails.label);
|
|
|
|
document.getElementById("btnUpdateAttenuator").onclick = updateAttenuator.bind(
|
|
this,
|
|
nodeID,
|
|
callback
|
|
);
|
|
|
|
document.getElementById("btnCloseAttenuator").onclick = clearAttenuator.bind(
|
|
);
|
|
}
|
|
function updateAttenuator(nodeID) {
|
|
|
|
var id = nodeID;
|
|
var label = $("#txtAttenuatorName").val().trim();
|
|
var node_type = network.body.data.nodes.get(nodeID).node_type
|
|
|
|
if (nameLengthValidation("txtAttenuatorName")) {
|
|
|
|
if (node_type == fusedJSON.node_type) {
|
|
network.body.data.nodes.update({
|
|
id: id, label: label
|
|
});
|
|
var tdata = network.body.data.nodes.get(id);
|
|
tdata.isUpdate = true;
|
|
tempUndo.push(tdata);
|
|
clearAttenuator();
|
|
}
|
|
|
|
|
|
}
|
|
|
|
}
|
|
function clearAttenuator() {
|
|
$("#txtAttenuatorName").val('');
|
|
closeDrawer('attenuator');
|
|
UnSelectAll();
|
|
}
|
|
|
|
function ILAEdit(nodeID, callback) {
|
|
_roadmListDB().remove();
|
|
document.getElementById("ILAMenu").style.display = "none";
|
|
openDrawer('ILA');
|
|
var nodeDetails = network.body.data.nodes.get(nodeID);
|
|
$("#txtILAName").val(nodeDetails.label);
|
|
//$("#ddlPreAmpType").val(nodeDetails.pre_amp_type);
|
|
//$("#ddlBoosterType").val(nodeDetails.booster_type);
|
|
|
|
$("#divILAPro").hide();
|
|
$("#divILAPro").empty();
|
|
|
|
if (nodeDetails.amp_category == ILAJSON.amp_category) {
|
|
arrRoadmTypePro = nodeDetails.roadm_type_pro ? nodeDetails.roadm_type_pro : [];
|
|
_roadmListDB.insert(JSON.stringify(arrRoadmTypePro));
|
|
var connectedFiber = network.getConnectedEdges(nodeID);
|
|
|
|
$.each(connectedFiber, function (index, item) {
|
|
if (network.body.data.edges.get(item).component_type == dualFiberJSON.component_type)
|
|
loadRoadmType(item, nodeID, nodeDetails.amp_category, "divILAPro");
|
|
});
|
|
}
|
|
|
|
document.getElementById("btnILAUpdate").onclick = updateILA.bind(
|
|
this,
|
|
nodeID,
|
|
callback
|
|
);
|
|
|
|
document.getElementById("btnCloseILA").onclick = clearILA.bind(
|
|
);
|
|
}
|
|
function updateILA(nodeID) {
|
|
|
|
var id = nodeID;
|
|
var label = $("#txtILAName").val().trim();
|
|
var nodeDetails = network.body.data.nodes.get(nodeID);
|
|
|
|
if (nameLengthValidation("txtILAName")) {
|
|
|
|
var roadmtypeprodata = _roadmListDB().get();
|
|
if (nodeDetails.amp_category == ILAJSON.amp_category) {
|
|
|
|
$.each(roadmtypeprodata, function (index, item) {
|
|
var lddlpreamptype = "#" + elepreamptype + item.roadm_fiber_id;
|
|
var lddlboostertype = "#" + eleboostertype + item.roadm_fiber_id;
|
|
var edgeDetails = network.body.data.edges.get(item.roadm_fiber_id);
|
|
var llabelname = nodeDetails.amp_category + "- [" + label + ' - ' + network.body.data.nodes.get(edgeDetails.to).label + ' ]'
|
|
_roadmListDB({ "roadm_fiber_id": item.roadm_fiber_id, }).update({
|
|
"roadm_label": llabelname,
|
|
"pre_amp_type": $(lddlpreamptype).val(), "booster_type": $(lddlboostertype).val(),
|
|
});
|
|
});
|
|
roadmtypeprodata = _roadmListDB().get();
|
|
network.body.data.nodes.update({
|
|
id: id, label: label, roadm_type_pro: roadmtypeprodata
|
|
});
|
|
clearILA();
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
function clearILA() {
|
|
$("#txtILAName").val('');
|
|
$("#ddlPreAmpType").val('');
|
|
$("#ddlBoosterType").val('');
|
|
$("#divILAPro").empty();
|
|
closeDrawer('ILA');
|
|
UnSelectAll();
|
|
_roadmListDB().remove();
|
|
}
|
|
|
|
function amplifierEdit(nodeID, callback) {
|
|
document.getElementById("amplifierMenu").style.display = "none";
|
|
openDrawer('amplifier');
|
|
var nodeDetails = network.body.data.nodes.get(nodeID[nodeID.length - 1]);
|
|
$("#txtAmplifierName").val(nodeDetails.label);
|
|
$("#ddlAmplifierType").val(nodeDetails.amp_type);
|
|
|
|
|
|
|
|
if (nodeID.length > 1) {
|
|
$("#divAmpName").hide();
|
|
$("#ddlAmplifierType").val('');
|
|
$("#ddlAmplifierType").addClass('input_error');
|
|
|
|
var matchCount = 1;
|
|
for (var i = 0; i < nodeID.length - 1; i++) {
|
|
if (network.body.data.nodes.get(nodeID[i]).amp_type == nodeDetails.amp_type) {
|
|
matchCount++;
|
|
}
|
|
}
|
|
if (matchCount == nodeID.length) {
|
|
if (nodeDetails.amp_type) {
|
|
$("#ddlAmplifierType").val(nodeDetails.amp_type);
|
|
$("#ddlAmplifierType").removeClass('input_error');
|
|
}
|
|
}
|
|
|
|
}
|
|
else {
|
|
$("#divAmpName").show();
|
|
if (nodeDetails.amp_type) {
|
|
$("#ddlAmplifierType").removeClass('input_error');
|
|
}
|
|
else {
|
|
$("#ddlAmplifierType").addClass('input_error');
|
|
}
|
|
}
|
|
|
|
document.getElementById("btnAmplifierUpdate").onclick = updateAmplifier.bind(
|
|
this,
|
|
nodeID,
|
|
callback
|
|
);
|
|
|
|
document.getElementById("btnCloseAmplifier").onclick = clearAmplifier.bind(
|
|
);
|
|
}
|
|
function updateAmplifier(nodeID) {
|
|
removeNodeList = [];
|
|
if (nameLengthValidation("txtAmplifierName")) {
|
|
|
|
var id = nodeID[nodeID.length - 1];
|
|
var label = $("#txtAmplifierName").val().trim();
|
|
var amp_category = network.body.data.nodes.get(id).amp_category
|
|
|
|
if ($("#ddlAmplifierType").val() == null) {
|
|
showMessage(alertType.Error, 'Pleae select type');
|
|
$("#ddlAmplifierType").addClass('input_error');
|
|
return;
|
|
}
|
|
else
|
|
$("#ddlAmplifierType").removeClass('input_error');
|
|
|
|
|
|
if (amp_category == amplifierJSON.amp_category) {
|
|
|
|
if (nodeID.length > 1) {
|
|
var preUpdateList = [];
|
|
for (var i = 0; i < nodeID.length; i++) {
|
|
|
|
if (network.body.data.nodes.get(nodeID[i]).image == DIR + amplifierJSON.h_image || network.body.data.nodes.get(nodeID[i]).image == DIR + amplifierJSON.fh_image) {
|
|
preUpdateList.push(network.body.data.nodes.get(nodeID[i]));
|
|
network.body.data.nodes.update({
|
|
id: nodeID[i], amp_type: $("#ddlAmplifierType").val()
|
|
});
|
|
realUpdate_Amplifier(nodeID[i], $("#ddlAmplifierType").val());
|
|
var tdata = network.body.data.nodes.get(nodeID[i]);
|
|
//tdata.isUpdate = true;
|
|
removeNodeList.push(tdata);
|
|
}
|
|
}
|
|
if (removeNodeList.length > 0) {
|
|
var updateList = {
|
|
isMultiple: true,
|
|
isUpdate: true,
|
|
preList: preUpdateList,
|
|
list: removeNodeList
|
|
}
|
|
tempUndo.push(updateList);
|
|
}
|
|
} else {
|
|
network.body.data.nodes.update({
|
|
id: id, label: label, amp_type: $("#ddlAmplifierType").val()
|
|
});
|
|
realUpdate_Amplifier(id, $("#ddlAmplifierType").val());
|
|
|
|
var tdata = network.body.data.nodes.get(id);
|
|
tdata.isUpdate = true;
|
|
tempUndo.push(tdata);
|
|
}
|
|
|
|
clearAmplifier();
|
|
}
|
|
|
|
|
|
}
|
|
|
|
}
|
|
function clearAmplifier() {
|
|
$("#txtAmplifierName").val('');
|
|
$("#ddlAmplifierType").val('');
|
|
closeDrawer('amplifier');
|
|
UnSelectAll();
|
|
}
|
|
function realUpdate_Amplifier(id, rtype) {
|
|
var amptype = rtype;
|
|
var connectedEdges;
|
|
var fromCount;
|
|
var toCount;
|
|
connectedEdges = network.getConnectedEdges(id);
|
|
fromCount = 0;
|
|
toCount = 0;
|
|
for (i = 0; i < connectedEdges.length; i++) {
|
|
edgeDetails = network.body.data.edges.get(connectedEdges[i]);
|
|
if (edgeDetails.from == id)
|
|
fromCount++;
|
|
else if (edgeDetails.to == id)
|
|
toCount++;
|
|
}
|
|
|
|
if (fromCount == 1 && toCount == 1) {
|
|
if (amptype) {
|
|
removeSpanInError(id, true);
|
|
}
|
|
}
|
|
else {
|
|
if (amptype) {
|
|
removeID = "#spanTF" + id.replace(/\s/g, '');
|
|
$(removeID).remove();
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
function ramanAmpEdit(nodeID, callback) {
|
|
document.getElementById("ramanAmpMenu").style.display = "none";
|
|
openDrawer('ramanamp');
|
|
var nodeDetails = network.body.data.nodes.get(nodeID[nodeID.length - 1]);
|
|
$("#txtRamanAmpName").val(nodeDetails.label);
|
|
$("#ddlRamanAmpType").val(nodeDetails.amp_type);
|
|
$("#ddlRamanAmpCategory").val(nodeDetails.category);
|
|
|
|
|
|
if (nodeID.length > 1) {
|
|
$("#divRamanAmpName").hide();
|
|
$("#ddlRamanAmpType").val('');
|
|
$("#ddlRamanAmpType").addClass('input_error');
|
|
$("#ddlRamanAmpCategory").val('');
|
|
$("#ddlRamanAmpCategory").addClass('input_error');
|
|
|
|
var matchCount = 1;
|
|
for (var i = 0; i < nodeID.length - 1; i++) {
|
|
if (network.body.data.nodes.get(nodeID[i]).amp_type == nodeDetails.amp_type && network.body.data.nodes.get(nodeID[i]).category == nodeDetails.category) {
|
|
matchCount++;
|
|
}
|
|
}
|
|
if (matchCount == nodeID.length) {
|
|
if (nodeDetails.amp_type && nodeDetails.category) {
|
|
$("#ddlRamanAmpType").val(nodeDetails.amp_type);
|
|
$("#ddlRamanAmpType").removeClass('input_error');
|
|
$("#ddlRamanAmpCategory").val(nodeDetails.category);
|
|
$("#ddlRamanAmpCategory").removeClass('input_error');
|
|
}
|
|
}
|
|
|
|
}
|
|
else {
|
|
$("#divRamanAmpName").show();
|
|
if (nodeDetails.amp_type) {
|
|
$("#ddlRamanAmpType").removeClass('input_error');
|
|
}
|
|
else {
|
|
$("#ddlRamanAmpType").addClass('input_error');
|
|
}
|
|
if (nodeDetails.category) {
|
|
$("#ddlRamanAmpCategory").removeClass('input_error');
|
|
}
|
|
else {
|
|
$("#ddlRamanAmpCategory").addClass('input_error');
|
|
}
|
|
}
|
|
|
|
|
|
|
|
document.getElementById("btnRamanAmpUpdate").onclick = updateRamanAmp.bind(
|
|
this,
|
|
nodeID,
|
|
callback
|
|
);
|
|
|
|
document.getElementById("btnCloseRamanAmp").onclick = clearRamanAmp.bind(
|
|
);
|
|
}
|
|
function updateRamanAmp(nodeID) {
|
|
removeNodeList = [];
|
|
if (nameLengthValidation("txtRamanAmpName")) {
|
|
|
|
var id = nodeID[nodeID.length - 1];
|
|
var label = $("#txtRamanAmpName").val().trim();
|
|
var amp_category = network.body.data.nodes.get(id).amp_category
|
|
|
|
if ($("#ddlRamanAmpType").val() == null) {
|
|
showMessage(alertType.Error, 'Pleae select type');
|
|
$("#ddlRamanAmpType").addClass('input_error');
|
|
return;
|
|
}
|
|
else
|
|
$("#ddlRamanAmpType").removeClass('input_error');
|
|
|
|
if ($("#ddlRamanAmpCategory").val() == null) {
|
|
showMessage(alertType.Error, 'Pleae select category');
|
|
$("#ddlRamanAmpCategory").addClass('input_error');
|
|
return;
|
|
}
|
|
else
|
|
$("#ddlRamanAmpCategory").removeClass('input_error');
|
|
|
|
|
|
if (amp_category == ramanampJSON.amp_category) {
|
|
if (nodeID.length > 1) {
|
|
var preUpdateList = [];
|
|
for (var i = 0; i < nodeID.length; i++) {
|
|
if (network.body.data.nodes.get(nodeID[i]).image == DIR + ramanampJSON.h_image || network.body.data.nodes.get(nodeID[i]).image == DIR + ramanampJSON.fh_image) {
|
|
preUpdateList.push(network.body.data.nodes.get(nodeID[i]));
|
|
network.body.data.nodes.update({
|
|
id: nodeID[i], amp_type: $("#ddlRamanAmpType").val(), category: $("#ddlRamanAmpCategory").val()
|
|
});
|
|
realUpdate_RamanAmp(nodeID[i], $("#ddlRamanAmpType").val());
|
|
var tdata = network.body.data.nodes.get(nodeID[i]);
|
|
//tdata.isUpdate = true;
|
|
removeNodeList.push(tdata);
|
|
}
|
|
}
|
|
if (removeNodeList.length > 0) {
|
|
var updateList = {
|
|
isMultiple: true,
|
|
isUpdate: true,
|
|
preList: preUpdateList,
|
|
list: removeNodeList
|
|
}
|
|
tempUndo.push(updateList);
|
|
}
|
|
} else {
|
|
network.body.data.nodes.update({
|
|
id: id, label: label, amp_type: $("#ddlRamanAmpType").val(), category: $("#ddlRamanAmpCategory").val()
|
|
});
|
|
|
|
realUpdate_RamanAmp(id, $("#ddlRamanAmpType").val());
|
|
var tdata = network.body.data.nodes.get(id);
|
|
tdata.isUpdate = true;
|
|
tempUndo.push(tdata);
|
|
}
|
|
|
|
clearRamanAmp();
|
|
}
|
|
|
|
|
|
}
|
|
|
|
}
|
|
function clearRamanAmp() {
|
|
$("#txtRamanAmpName").val('');
|
|
$("#ddlRamanAmpType").val('');
|
|
$("#ddlRamanAmpCategory").val('');
|
|
closeDrawer('ramanamp');
|
|
UnSelectAll();
|
|
}
|
|
function realUpdate_RamanAmp(id, rtype) {
|
|
var amptype = rtype;
|
|
var connectedEdges;
|
|
var fromCount;
|
|
var toCount;
|
|
connectedEdges = network.getConnectedEdges(id);
|
|
fromCount = 0;
|
|
toCount = 0;
|
|
for (i = 0; i < connectedEdges.length; i++) {
|
|
edgeDetails = network.body.data.edges.get(connectedEdges[i]);
|
|
if (edgeDetails.from == id)
|
|
fromCount++;
|
|
else if (edgeDetails.to == id)
|
|
toCount++;
|
|
}
|
|
if (fromCount == 1 && toCount == 1) {
|
|
|
|
if (amptype) {
|
|
removeSpanInError(id, true);
|
|
removeSpanInError(id, true);
|
|
}
|
|
}
|
|
else {
|
|
if (amptype) {
|
|
removeID = "#spanTF" + id.replace(/\s/g, '');
|
|
$(removeID).remove();
|
|
$(removeID).remove();
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
function transceiverEdit(nodeID, callback) {
|
|
document.getElementById("transceiverMenu").style.display = "none";
|
|
openDrawer('transceiver');
|
|
var nodeDetails = network.body.data.nodes.get(nodeID[nodeID.length - 1]);
|
|
$("#txtTransceiverName").val(nodeDetails.label);
|
|
$("#ddlTransceiverType").val(nodeDetails.transceiver_type);
|
|
|
|
|
|
|
|
|
|
if (nodeID.length > 1) {
|
|
$("#divTransName").hide();
|
|
$("#ddlTransceiverType").val('');
|
|
$("#ddlTransceiverType").addClass('input_error');
|
|
|
|
var matchCount = 1;
|
|
for (var i = 0; i < nodeID.length - 1; i++) {
|
|
if (network.body.data.nodes.get(nodeID[i]).transceiver_type == nodeDetails.transceiver_type) {
|
|
matchCount++;
|
|
}
|
|
}
|
|
if (matchCount == nodeID.length) {
|
|
if (nodeDetails.transceiver_type) {
|
|
$("#ddlTransceiverType").val(nodeDetails.transceiver_type);
|
|
$("#ddlTransceiverType").removeClass('input_error');
|
|
}
|
|
}
|
|
|
|
}
|
|
else {
|
|
$("#divTransName").show();
|
|
if (nodeDetails.transceiver_type) {
|
|
$("#ddlTransceiverType").removeClass('input_error');
|
|
}
|
|
else {
|
|
$("#ddlTransceiverType").addClass('input_error');
|
|
}
|
|
}
|
|
|
|
|
|
document.getElementById("btnTransceiverUpdate").onclick = updateTransceiver.bind(
|
|
this,
|
|
nodeID,
|
|
callback
|
|
);
|
|
|
|
document.getElementById("btnCloseTransceiver").onclick = clearTransceiver.bind(
|
|
);
|
|
}
|
|
function updateTransceiver(nodeID) {
|
|
removeNodeList = [];
|
|
if (nameLengthValidation("txtTransceiverName")) {
|
|
if (nodeID.length > 1) {
|
|
var preUpdateList = [];
|
|
for (var i = 0; i < nodeID.length; i++) {
|
|
if (network.body.data.nodes.get(nodeID[i]).image == DIR + transceiverJSON.h_image || network.body.data.nodes.get(nodeID[i]).image == DIR + transceiverJSON.fh_image) {
|
|
var id = nodeID[i];
|
|
var label = $("#txtTransceiverName").val().trim();
|
|
var nodeDetails = network.body.data.nodes.get(id);
|
|
var transceiverType = $("#ddlTransceiverType").val();
|
|
if (transceiverType == null || transceiverType == "") {
|
|
showMessage(alertType.Error, 'Please select transceiver type');
|
|
$("#ddlTransceiverType").addClass('input_error');
|
|
return;
|
|
}
|
|
else
|
|
$("#ddlTransceiverType").removeClass('input_error');
|
|
|
|
|
|
var connectedEdges = network.getConnectedEdges(id);
|
|
var fromTransType = "";
|
|
var toTransType = "";
|
|
var isOk = true;
|
|
$.each(connectedEdges, function (index, item) {
|
|
|
|
if (!isOk)
|
|
return;
|
|
var edgeDetails = network.body.data.edges.get(item);
|
|
if (edgeDetails.component_type == serviceJSON.component_type) {
|
|
if (edgeDetails.from == id) {
|
|
|
|
fromTransType = transceiverType;
|
|
toTransType = network.body.data.nodes.get(edgeDetails.to).transceiver_type;
|
|
}
|
|
else if (edgeDetails.to == id) {
|
|
toTransType = transceiverType;
|
|
fromTransType = network.body.data.nodes.get(edgeDetails.from).transceiver_type;
|
|
}
|
|
|
|
if (toTransType != fromTransType) {
|
|
isOk = false;
|
|
showMessage(alertType.Error, serviceJSON.component_type + " can be created/updated only between " + transceiverJSON.node_type + " of same type");
|
|
return;
|
|
}
|
|
}
|
|
|
|
});
|
|
|
|
if (isOk) {
|
|
if (nodeDetails.node_type == transceiverJSON.node_type) {
|
|
|
|
if (nodeID.length > 1) {
|
|
|
|
preUpdateList.push(network.body.data.nodes.get(id));
|
|
network.body.data.nodes.update({
|
|
id: id, transceiver_type: transceiverType
|
|
});
|
|
realUpdate_Transceiver(id, "");
|
|
var tdata = network.body.data.nodes.get(id);
|
|
removeNodeList.push(tdata);
|
|
|
|
} else {
|
|
network.body.data.nodes.update({
|
|
id: id, label: label, transceiver_type: transceiverType
|
|
});
|
|
realUpdate_Transceiver(id, "");
|
|
var tdata = network.body.data.nodes.get(id);
|
|
tdata.isUpdate = true;
|
|
tempUndo.push(tdata);
|
|
}
|
|
|
|
//if (tempEdge.length > 1) {
|
|
// removeSpanInError(id, true);
|
|
//}
|
|
//else {
|
|
|
|
// removeID = "#spanTF" + id.replace(/\s/g, '');
|
|
// $(removeID).remove();
|
|
//}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
if (removeNodeList.length > 0) {
|
|
var updateList = {
|
|
isMultiple: true,
|
|
isUpdate: true,
|
|
preList: preUpdateList,
|
|
list: removeNodeList
|
|
}
|
|
tempUndo.push(updateList);
|
|
}
|
|
}
|
|
else {
|
|
var id = nodeID[nodeID.length - 1];
|
|
var label = $("#txtTransceiverName").val().trim();
|
|
var nodeDetails = network.body.data.nodes.get(id);
|
|
var transceiverType = $("#ddlTransceiverType").val();
|
|
if (transceiverType == null || transceiverType == "") {
|
|
showMessage(alertType.Error, 'Please select transceiver type');
|
|
$("#ddlTransceiverType").addClass('input_error');
|
|
return;
|
|
}
|
|
else
|
|
$("#ddlTransceiverType").removeClass('input_error');
|
|
|
|
|
|
var connectedEdges = network.getConnectedEdges(id);
|
|
var fromTransType = "";
|
|
var toTransType = "";
|
|
var isOk = true;
|
|
$.each(connectedEdges, function (index, item) {
|
|
|
|
if (!isOk)
|
|
return;
|
|
var edgeDetails = network.body.data.edges.get(item);
|
|
if (edgeDetails.component_type == serviceJSON.component_type) {
|
|
if (edgeDetails.from == id) {
|
|
|
|
fromTransType = transceiverType;
|
|
toTransType = network.body.data.nodes.get(edgeDetails.to).transceiver_type;
|
|
}
|
|
else if (edgeDetails.to == id) {
|
|
toTransType = transceiverType;
|
|
fromTransType = network.body.data.nodes.get(edgeDetails.from).transceiver_type;
|
|
}
|
|
|
|
if (toTransType != fromTransType) {
|
|
isOk = false;
|
|
showMessage(alertType.Error, serviceJSON.component_type + " can be created/updated only between " + transceiverJSON.node_type + " of same type");
|
|
return;
|
|
}
|
|
}
|
|
|
|
});
|
|
|
|
if (isOk) {
|
|
if (nodeDetails.node_type == transceiverJSON.node_type) {
|
|
|
|
if (nodeID.length > 1) {
|
|
|
|
network.body.data.nodes.update({
|
|
id: id, transceiver_type: transceiverType
|
|
});
|
|
realUpdate_Transceiver(id, "");
|
|
|
|
} else {
|
|
network.body.data.nodes.update({
|
|
id: id, label: label, transceiver_type: transceiverType
|
|
});
|
|
realUpdate_Transceiver(id, "");
|
|
}
|
|
|
|
var tdata = network.body.data.nodes.get(id);
|
|
tdata.isUpdate = true;
|
|
tempUndo.push(tdata);
|
|
|
|
//if (tempEdge.length > 1) {
|
|
// removeSpanInError(id, true);
|
|
//}
|
|
//else {
|
|
|
|
// removeID = "#spanTF" + id.replace(/\s/g, '');
|
|
// $(removeID).remove();
|
|
//}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
clearTransceiver();
|
|
}
|
|
|
|
}
|
|
function clearTransceiver() {
|
|
$("#txtTransceiverName").val('');
|
|
$("#ddlTransceiverType").val('');
|
|
$("#ddlDataRate").val('');
|
|
closeDrawer('transceiver');
|
|
UnSelectAll();
|
|
}
|
|
function realUpdate_Transceiver(id, rtype) {
|
|
var connectedEges = network.getConnectedEdges(id);
|
|
var tempEdge = [];
|
|
$.each(connectedEges, function (index, item) {
|
|
if (network.body.data.edges.get(item).component_type != serviceJSON.component_type) {
|
|
tempEdge.push(item);
|
|
}
|
|
});
|
|
|
|
var fromCount = 0;
|
|
var toCount = 0;
|
|
for (i = 0; i < tempEdge.length; i++) {
|
|
edgeDetails = network.body.data.edges.get(tempEdge[i]);
|
|
if (edgeDetails.from == id)
|
|
fromCount++;
|
|
else if (edgeDetails.to == id)
|
|
toCount++;
|
|
}
|
|
|
|
if (fromCount != toCount || (fromCount == 0 && toCount == 0)) {
|
|
//addNodeHighlight(item);
|
|
removeID = "#spanTF" + id.replace(/\s/g, '');
|
|
$(removeID).remove();
|
|
}
|
|
else {
|
|
removeSpanInError(id, true);
|
|
}
|
|
}
|
|
|
|
var removeNodeList = [];
|
|
function deleteNode(nodeList) {
|
|
removeNodeList = [];
|
|
for (var i = 0; i < nodeList.length; i++) {
|
|
if (nodeList.length > 1) {
|
|
if (network.body.data.nodes.get(nodeList[i]).image == DIR + roadmJSON.h_image)
|
|
removeNodes(nodeList[i], true);
|
|
else if (network.body.data.nodes.get(nodeList[i]).image == DIR + fusedJSON.h_image)
|
|
removeNodes(nodeList[i], true);
|
|
else if (network.body.data.nodes.get(nodeList[i]).image == DIR + transceiverJSON.h_image)
|
|
removeNodes(nodeList[i], true);
|
|
else if (network.body.data.nodes.get(nodeList[i]).image == DIR + amplifierJSON.h_image)
|
|
removeNodes(nodeList[i], true);
|
|
else if (network.body.data.nodes.get(nodeList[i]).image == DIR + ramanampJSON.h_image)
|
|
removeNodes(nodeList[i], true);
|
|
}
|
|
else {
|
|
removeNodes(nodeList[i]);
|
|
}
|
|
}
|
|
|
|
if (nodeList.length > 1 && removeNodeList.length > 0) {
|
|
var reList = {
|
|
isMultiple: true,
|
|
isUpdate: false,
|
|
list: removeNodeList
|
|
}
|
|
tempUndo.push(reList);
|
|
}
|
|
|
|
$("#stepCreateTopology").click();
|
|
UnSelectAll();
|
|
|
|
}
|
|
|
|
function removeNodes(nodeID, isMutiple) {
|
|
var nodeDetails = network.body.data.nodes.get(nodeID);
|
|
var node_type = nodeDetails.node_type;
|
|
if (nodeDetails.node_type == ILAJSON.node_type)
|
|
node_type = nodeDetails.amp_category;
|
|
|
|
document.getElementById("roadmMenu").style.display = "none";
|
|
document.getElementById("attenuatorMenu").style.display = "none";
|
|
document.getElementById("ILAMenu").style.display = "none";
|
|
document.getElementById("amplifierMenu").style.display = "none";
|
|
document.getElementById("transceiverMenu").style.display = "none";
|
|
|
|
if (network.getConnectedEdges(nodeID).length > 0) {
|
|
showMessage(alertType.Error, "Unpair " + roadmJSON.component_type + " - " + nodeDetails.label + ", then try to delete");
|
|
|
|
} else {
|
|
//nodes.remove(nodeID);
|
|
|
|
if (nodeDetails.node_type == transceiverJSON.node_type || nodeDetails.node_type == roadmJSON.node_type) {
|
|
removeSpanInError(nodeID);
|
|
removeSpanInError(nodeID, true);
|
|
}
|
|
else if (nodeDetails.node_type == amplifierJSON.node_type) {
|
|
if (nodeDetails.amp_category == amplifierJSON.amp_category) {
|
|
removeSpanInError(nodeID);
|
|
removeSpanInError(nodeID, true);
|
|
}
|
|
if (nodeDetails.amp_category == ramanampJSON.amp_category) {
|
|
removeSpanInError(nodeID);
|
|
removeSpanInError(nodeID, true);
|
|
removeSpanInError(nodeID, true);
|
|
}
|
|
}
|
|
else
|
|
removeSpanInError(nodeID);
|
|
|
|
//var tremove = network.body.data.nodes.get(nodeID)
|
|
|
|
|
|
if (isMutiple) {
|
|
removeNodeList.push(nodeDetails);
|
|
}
|
|
else {
|
|
nodeDetails.isDelete = true;
|
|
nodeDetails.isUpdate = false;
|
|
tempUndo.push(nodeDetails);
|
|
}
|
|
|
|
network.body.data.nodes.remove(nodeID);
|
|
|
|
|
|
}
|
|
}
|
|
function dualFiberEdit(fiberID, callback) {
|
|
document.getElementById("dualFiberMenu").style.display = "none";
|
|
|
|
clearCbxandAccordian();
|
|
openDrawer('dualfiber');
|
|
var edgeDetails = network.body.data.edges.get(fiberID);
|
|
var connectedNode = network.getConnectedNodes(fiberID);
|
|
|
|
|
|
$("#txtFiberName").val(edgeDetails.text);
|
|
//fiber A details
|
|
$("#ddlFiberAType").val(edgeDetails.fiber_type);
|
|
$("#txtFiberASL").val(edgeDetails.span_length);
|
|
$("#txtFiberALC").val(edgeDetails.loss_coefficient);
|
|
$("#txtFiberACIN").val(edgeDetails.connector_in);
|
|
$("#txtFiberACOUT").val(edgeDetails.connector_out);
|
|
$("#txtFiberASpanLoss").val(edgeDetails.span_loss);
|
|
//fiber B details
|
|
if (edgeDetails.RxToTxFiber) {
|
|
$("#ddlFiberBType").val(edgeDetails.RxToTxFiber.fiber_type);
|
|
$("#txtFiberBSL").val(edgeDetails.RxToTxFiber.span_length);
|
|
$("#txtFiberBLC").val(edgeDetails.RxToTxFiber.loss_coefficient);
|
|
$("#txtFiberBCIN").val(edgeDetails.RxToTxFiber.connector_in);
|
|
$("#txtFiberBCOUT").val(edgeDetails.RxToTxFiber.connector_out);
|
|
$("#txtFiberBSpanLoss").val(edgeDetails.RxToTxFiber.span_loss);
|
|
}
|
|
|
|
|
|
$("#pFiberA").text("Fiber A [" + network.body.data.nodes.get(connectedNode[0]).label + ' - ' + network.body.data.nodes.get(connectedNode[1]).label + "]");
|
|
$("#pFiberB").text("Fiber B [" + network.body.data.nodes.get(connectedNode[1]).label + ' - ' + network.body.data.nodes.get(connectedNode[0]).label + "]");
|
|
|
|
document.getElementById("btnDualFiberUpdate").onclick = updateDualFiber.bind(
|
|
this,
|
|
fiberID,
|
|
callback
|
|
);
|
|
document.getElementById("btnCloseDualFiber").onclick = clearDualFiber.bind(
|
|
);
|
|
}
|
|
function updateDualFiber(fiberID) {
|
|
var id = fiberID;
|
|
var label = $("#txtFiberName").val().trim();
|
|
var fiber_type = $("#ddlFiberAType").val();
|
|
var span_length = $("#txtFiberASL").val();
|
|
var loss_coefficient = $("#txtFiberALC").val();
|
|
var connector_in = $("#txtFiberACIN").val();
|
|
var connector_out = $("#txtFiberACOUT").val();
|
|
var span_loss = $("#txtFiberASpanLoss").val();
|
|
|
|
var fiber_typeB = $("#ddlFiberBType").val();
|
|
var span_lengthB = $("#txtFiberBSL").val();
|
|
var loss_coefficientB = $("#txtFiberBLC").val();
|
|
var connector_inB = $("#txtFiberBCIN").val();
|
|
var connector_outB = $("#txtFiberBCOUT").val();
|
|
var span_lossB = $("#txtFiberBSpanLoss").val();
|
|
|
|
var spanlen = parseFloat(span_length);
|
|
if (spanlen <= 0) {
|
|
showMessage(alertType.Error, dualFiberJSON.component_type + ' A : please enter valid span length.');
|
|
return;
|
|
}
|
|
|
|
var Bspan_length = parseFloat($("#txtFiberBSL").val());
|
|
|
|
spanlen = parseFloat(Bspan_length);
|
|
if (spanlen <= 0) {
|
|
showMessage(alertType.Error, dualFiberJSON.component_type + ' B : please enter valid span length.');
|
|
return;
|
|
}
|
|
|
|
var fiberDetails = network.body.data.edges.get(fiberID);
|
|
|
|
|
|
|
|
if (nameLengthValidation("txtFiberName")) {
|
|
if (fiberDetails.component_type == dualFiberJSON.component_type && fiberDetails.fiber_category == dualFiberJSON.fiber_category) {
|
|
|
|
var elabel = "";
|
|
elabel = label;
|
|
|
|
network.body.data.edges.update({
|
|
id: id, label: elabel, text: label, fiber_type: fiber_type, span_length: span_length,
|
|
loss_coefficient: loss_coefficient, connector_in: connector_in, connector_out: connector_out, span_loss: span_loss,
|
|
RxToTxFiber: {
|
|
from: fiberDetails.to, to: fiberDetails.from, fiber_category: fiberDetails.fiber_category, component_type: fiberDetails.component_type,
|
|
label: label, text: label, fiber_type: fiber_typeB, span_length: span_lengthB,
|
|
loss_coefficient: loss_coefficientB, connector_in: connector_inB, connector_out: connector_outB, span_loss: span_lossB,
|
|
}
|
|
});
|
|
data.nodes.off("*", change_history_back);
|
|
data.edges.off("*", change_history_back);
|
|
multipleFiberService(fiberDetails.from, fiberDetails.to);
|
|
data.nodes.on("*", change_history_back);
|
|
data.edges.on("*", change_history_back);
|
|
clearDualFiber();
|
|
}
|
|
|
|
}
|
|
}
|
|
function clearDualFiber() {
|
|
$("#txtfiberName").val('');
|
|
|
|
$("#ddlFiberAType").val('');
|
|
$("#txtFiberASL").val('');
|
|
$("#txtFiberALC").val('');
|
|
$("#txtFiberACIN").val('');
|
|
$("#txtFiberACOUT").val('');
|
|
|
|
$("#ddlFiberBType").val('');
|
|
$("#txtFiberBSL").val('');
|
|
$("#txtFiberBLC").val('');
|
|
$("#txtFiberBCIN").val('');
|
|
$("#txtFiberBCOUT").val('');
|
|
clearCbxandAccordian();
|
|
|
|
closeDrawer('dualfiber');
|
|
UnSelectAll();
|
|
enableEdgeIndicator();
|
|
}
|
|
function clearCbxandAccordian() {
|
|
if ($("#aFiberA").text() == "-")
|
|
$("#aFiberA").click();
|
|
if ($("#aFiberB").text() == "-")
|
|
$("#aFiberB").click();
|
|
|
|
$('#cbx_FiberALBL').prop('checked', false);
|
|
$('#cbx_FiberBLBL').prop('checked', false);
|
|
$('#cbx_clone').prop('checked', false);
|
|
}
|
|
|
|
function singleFiberEdit(fiberID, callback) {
|
|
$("#txtLoss_Coefficient").removeClass('input_error');
|
|
$('#cbxLength_Based_Loss').prop('checked', false);
|
|
document.getElementById("singleFiberMenu").style.display = "none";
|
|
var edgeDetails = network.body.data.edges.get(fiberID);
|
|
var connectedNode = network.getConnectedNodes(fiberID);
|
|
$("#txtSinlgeFiberName").val(edgeDetails.text);
|
|
$("#txtSource").val(network.body.data.nodes.get(connectedNode[0]).label);
|
|
$("#txtDestination").val(network.body.data.nodes.get(connectedNode[1]).label);
|
|
$("#ddlSingleFiberType").val(edgeDetails.fiber_type);
|
|
$("#txtSpan_Length").val(edgeDetails.span_length);
|
|
$("#txtLoss_Coefficient").val(edgeDetails.loss_coefficient);
|
|
$("#txtConnector_IN").val(edgeDetails.connector_in);
|
|
$("#txtConnector_OUT").val(edgeDetails.connector_out);
|
|
$("#txtSpan_Loss").val(edgeDetails.span_loss);
|
|
|
|
var span_length = $("#txtSpan_Length").val().trim();
|
|
var spanlen = parseFloat(span_length);
|
|
if (isNaN(span_length) || spanlen <= 0 || span_length == "") {
|
|
$("#txtSpan_Length").addClass('input_error');
|
|
}
|
|
else
|
|
$("#txtSpan_Length").removeClass('input_error');
|
|
|
|
if ($("#ddlSingleFiberType").val() == null) {
|
|
$("#ddlSingleFiberType").addClass('input_error');
|
|
}
|
|
else
|
|
$("#ddlSingleFiberType").removeClass('input_error');
|
|
|
|
openDrawer('singlefiber');
|
|
document.getElementById("btnSingleFiberUpdate").onclick = updateSingleFiber.bind(
|
|
this,
|
|
fiberID,
|
|
callback
|
|
);
|
|
document.getElementById("btnCloseSingleFiber").onclick = clearSingleFiber.bind(
|
|
);
|
|
}
|
|
function updateSingleFiber(fiberID) {
|
|
|
|
var id = fiberID;
|
|
var label = $("#txtSinlgeFiberName").val().trim();
|
|
var fiber_type = $("#ddlSingleFiberType").val();
|
|
var span_length = $("#txtSpan_Length").val().trim();
|
|
var loss_coefficient = $("#txtLoss_Coefficient").val().trim();
|
|
var connector_in = $("#txtConnector_IN").val();
|
|
var connector_out = $("#txtConnector_OUT").val();
|
|
var span_loss = $("#txtSpan_Loss").val();
|
|
|
|
if ($("#ddlSingleFiberType").val() == null) {
|
|
showMessage(alertType.Error, 'Pleae select fiber type');
|
|
$("#ddlSingleFiberType").addClass('input_error');
|
|
return;
|
|
}
|
|
else
|
|
$("#ddlSingleFiberType").removeClass('input_error');
|
|
|
|
var spanlen = parseFloat(span_length);
|
|
if (isNaN(span_length) || spanlen <= 0 || span_length == "") {
|
|
showMessage(alertType.Error, 'Pleae enter valid span length.');
|
|
$("#txtSpan_Length").addClass('input_error');
|
|
return;
|
|
}
|
|
else
|
|
$("#txtSpan_Length").removeClass('input_error');
|
|
|
|
if ($('#cbxLength_Based_Loss').is(":checked")) {
|
|
var lossCoeff = parseFloat(loss_coefficient);
|
|
if (isNaN(loss_coefficient) || lossCoeff <= 0 || loss_coefficient == "") {
|
|
showMessage(alertType.Error, "Length based loss requires span length and loss coefficient to be entered");
|
|
return;
|
|
}
|
|
}
|
|
|
|
var fiberDetails = network.body.data.edges.get(fiberID);
|
|
|
|
if (nameLengthValidation("txtSinlgeFiberName")) {
|
|
|
|
if (fiberDetails.component_type == singleFiberJSON.component_type && fiberDetails.fiber_category == singleFiberJSON.fiber_category) {
|
|
|
|
var elabel = "";
|
|
elabel = label;
|
|
|
|
network.body.data.edges.update({
|
|
id: id, label: elabel, text: label, fiber_type: fiber_type, span_length: span_length, color: singleFiberJSON.options.color,
|
|
pre_color: singleFiberJSON.options.color,
|
|
loss_coefficient: loss_coefficient, connector_in: connector_in, connector_out: connector_out, span_loss: span_loss
|
|
});
|
|
data.nodes.off("*", change_history_back);
|
|
data.edges.off("*", change_history_back);
|
|
multipleFiberService(fiberDetails.from, fiberDetails.to);
|
|
removeID = "#spanFP" + id.replace(/\s/g, '');
|
|
$(removeID).remove();
|
|
$(removeID).remove();
|
|
checkErrorFree();
|
|
data.nodes.on("*", change_history_back);
|
|
data.edges.on("*", change_history_back);
|
|
|
|
var tdata = network.body.data.edges.get(id);
|
|
tdata.isUpdate = true;
|
|
tempUndo.push(tdata);
|
|
|
|
clearSingleFiber();
|
|
}
|
|
|
|
}
|
|
}
|
|
function clearSingleFiber() {
|
|
|
|
$("#txtSinlgeFiberName").val('');
|
|
$("#txtSource").val('');
|
|
$("#txtDestination").val('');
|
|
$("#ddlSingleFiberType").val('');
|
|
$("#txtSpan_Length").val('');
|
|
$("#txtLoss_Coefficient").val('');
|
|
$("#txtConnector_IN").val('');
|
|
$("#txtConnector_OUT").val('');
|
|
$("#txtSpan_Loss").val('');
|
|
|
|
$("#ddlSingleFiberType").removeClass('input_error');
|
|
$("#txtSpan_Length").removeClass('input_error');
|
|
|
|
$('#cbxLength_Based_Loss').prop('checked', false);
|
|
closeDrawer('singlefiber');
|
|
UnSelectAll();
|
|
enableEdgeIndicator();
|
|
}
|
|
|
|
function deleteFiber(fiberID) {
|
|
|
|
var fiber = network.body.data.edges.get(fiberID);
|
|
|
|
//if (checkNodeServiceConnection(fiber.from, fiber.to)) {
|
|
// alert('cannot remove ' + fiber.fiber_category + ' : ' + fiber.label);
|
|
// return;
|
|
//}
|
|
|
|
var fiberLabel = fiber.label;
|
|
if (fiber.label.trim() == "")
|
|
fiberLabel = fiber.text
|
|
|
|
//Swal.fire({
|
|
// icon: 'warning',
|
|
// title: '',
|
|
// text: 'Do you want to delete ' + fiber.fiber_category + ' : ' + fiberLabel + ' ?',
|
|
// showCancelButton: true,
|
|
// confirmButtonText: "OK",
|
|
// closeOnConfirm: true,
|
|
// confirmButtonColor: '#49508a',
|
|
// width: 375,
|
|
// height: 200,
|
|
// allowOutsideClick: false
|
|
//}).then((result) => {
|
|
// if (result.value) {
|
|
var nodeDetails = network.body.data.nodes.get(fiber.from);
|
|
var toNodeDetails = network.body.data.nodes.get(fiber.to);
|
|
|
|
if (checkFiberPatchServiceCon(fiber.from, fiber.to, fiber.component_type))
|
|
return;
|
|
|
|
|
|
document.getElementById("dualFiberMenu").style.display = "none";
|
|
document.getElementById("singleFiberMenu").style.display = "none";
|
|
//remove roadm list from from roadm node
|
|
|
|
arrRoadmTypePro = nodeDetails.roadm_type_pro ? nodeDetails.roadm_type_pro : [];
|
|
_roadmListDB.insert(JSON.stringify(arrRoadmTypePro));
|
|
|
|
_roadmListDB({
|
|
roadm_fiber_id: fiberID
|
|
}).remove();
|
|
arrRoadmTypePro = _roadmListDB().get();
|
|
network.body.data.nodes.update({
|
|
id: nodeDetails.id, roadm_type_pro: arrRoadmTypePro
|
|
});
|
|
//remove roadm list from to roadm node
|
|
|
|
arrRoadmTypePro = toNodeDetails.roadm_type_pro ? toNodeDetails.roadm_type_pro : [];
|
|
_roadmListDB.insert(JSON.stringify(arrRoadmTypePro));
|
|
|
|
_roadmListDB({
|
|
roadm_fiber_id: fiberID
|
|
}).remove();
|
|
arrRoadmTypePro = _roadmListDB().get();
|
|
network.body.data.nodes.update({
|
|
id: toNodeDetails.id, roadm_type_pro: arrRoadmTypePro
|
|
});
|
|
|
|
|
|
var tedge = network.body.data.edges.get(fiberID);
|
|
network.body.data.edges.remove(fiberID);
|
|
multipleFiberService(fiber.from, fiber.to);
|
|
nodeValidationInEdge(fiber.from, fiber.to);
|
|
|
|
tedge.isDelete = true;
|
|
tedge.isUpdate = false;
|
|
tempUndo.push(tedge);
|
|
|
|
UnSelectAll();
|
|
enableEdgeIndicator();
|
|
// }
|
|
//});
|
|
|
|
|
|
|
|
}
|
|
|
|
function checkFiberPatchServiceCon(from, to, edgeType) {
|
|
var isOk = false;
|
|
var nodeDetails = network.body.data.nodes.get(from);
|
|
var toNodeDetails = network.body.data.nodes.get(to);
|
|
|
|
var fromCount = 0;
|
|
var toCount = 0;
|
|
|
|
if (nodeDetails.node_type == transceiverJSON.node_type) {
|
|
var fromConnection = network.getConnectedEdges(from);
|
|
var isServiceCon = false;
|
|
$.each(fromConnection, function (index, item) {
|
|
var fiberDetails = network.body.data.edges.get(item);
|
|
if (fiberDetails.component_type == dualFiberJSON.component_type || fiberDetails.component_type == dualPatchJSON.component_type) {
|
|
fromCount++;
|
|
}
|
|
else if (fiberDetails.component_type == serviceJSON.component_type)
|
|
isServiceCon = true;
|
|
});
|
|
|
|
if (isServiceCon) {
|
|
if (fromCount == 1) {
|
|
showMessage(alertType.Error, 'Cannot remove ' + edgeType + ', ' + transceiverJSON.node_type + ' ' + transceiverJSON.component_type + ' - ' + nodeDetails.label + ' should have one ' + dualFiberJSON.component_type + '/' + dualPatchJSON.component_type + ' connection');
|
|
return true;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
if (toNodeDetails.node_type == transceiverJSON.node_type) {
|
|
var toConnection = network.getConnectedEdges(to);
|
|
var isServiceCon = false;
|
|
$.each(toConnection, function (index, item) {
|
|
var fiberDetails = network.body.data.edges.get(item);
|
|
if (fiberDetails.component_type == dualFiberJSON.component_type || fiberDetails.component_type == dualPatchJSON.component_type) {
|
|
toCount++;
|
|
}
|
|
else if (fiberDetails.component_type == serviceJSON.component_type)
|
|
isServiceCon = true;
|
|
});
|
|
|
|
if (isServiceCon) {
|
|
if (toCount == 1) {
|
|
showMessage(alertType.Error, 'Cannot remove ' + edgeType + ', ' + transceiverJSON.node_type + ' ' + transceiverJSON.component_type + ' - ' + toNodeDetails.label + ' should have one ' + dualFiberJSON.component_type + '/' + dualPatchJSON.component_type + ' connection')
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return isOk;
|
|
}
|
|
|
|
function singlePatchEdit(patchID, callback) {
|
|
document.getElementById("singlePatchMenu").style.display = "none";
|
|
var edgeDetails = network.body.data.edges.get(patchID);
|
|
$("#txtSinglePatchName").val(edgeDetails.text);
|
|
openDrawer('singlepatch');
|
|
document.getElementById("btnUpdateSinglePatch").onclick = updateSinglePatch.bind(
|
|
this,
|
|
patchID,
|
|
callback
|
|
);
|
|
document.getElementById("btnCloseSinglePatch").onclick = clearSinglePatch.bind(
|
|
);
|
|
}
|
|
function updateSinglePatch(patchID) {
|
|
|
|
var id = patchID;
|
|
var label = $("#txtSinglePatchName").val().trim();
|
|
var patchDetails = network.body.data.edges.get(patchID);
|
|
|
|
if (nameLengthValidation("txtSinglePatchName")) {
|
|
|
|
var elabel = "";
|
|
elabel = label;
|
|
if (patchDetails.component_type == dualPatchJSON.component_type) {
|
|
network.body.data.edges.update({
|
|
id: id, label: elabel, text: label
|
|
});
|
|
|
|
|
|
data.nodes.off("*", change_history_back);
|
|
data.edges.off("*", change_history_back);
|
|
multipleFiberService(patchDetails.from, patchDetails.to);
|
|
data.nodes.on("*", change_history_back);
|
|
data.edges.on("*", change_history_back);
|
|
|
|
var tdata = network.body.data.edges.get(id);
|
|
tdata.isUpdate = true;
|
|
tempUndo.push(tdata);
|
|
|
|
clearSinglePatch();
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
function deletePatch(patchID) {
|
|
|
|
var patchDetails = network.body.data.edges.get(patchID);
|
|
|
|
var patchLabel = patchDetails.label;
|
|
if (patchDetails.label.trim() == "")
|
|
patchLabel = patchDetails.text
|
|
|
|
//Swal.fire({
|
|
// icon: 'warning',
|
|
// title: '',
|
|
// text: 'Do you want to delete ' + patchDetails.patch_category + ' : ' + patchLabel + ' ?',
|
|
// showCancelButton: true,
|
|
// confirmButtonText: "OK",
|
|
// closeOnConfirm: true,
|
|
// confirmButtonColor: '#49508a',
|
|
// width: 375,
|
|
// height: 200,
|
|
// allowOutsideClick: false
|
|
//}).then((result) => {
|
|
// if (result.value) {
|
|
if (checkFiberPatchServiceCon(patchDetails.from, patchDetails.to, patchDetails.component_type))
|
|
return;
|
|
document.getElementById("singlePatchMenu").style.display = "none";
|
|
document.getElementById("dualPatchMenu").style.display = "none";
|
|
var patchd = network.body.data.edges.get(patchID);
|
|
network.body.data.edges.remove(patchID);
|
|
multipleFiberService(patchDetails.from, patchDetails.to);
|
|
nodeValidationInEdge(patchDetails.from, patchDetails.to);
|
|
|
|
patchd.isDelete = true;
|
|
patchd.isUpdate = false;
|
|
tempUndo.push(patchd);
|
|
|
|
UnSelectAll();
|
|
enableEdgeIndicator();
|
|
// }
|
|
//});
|
|
|
|
|
|
}
|
|
function clearSinglePatch() {
|
|
|
|
$("#txtSinglePatchName").val('');
|
|
closeDrawer('singlepatch');
|
|
UnSelectAll();
|
|
enableEdgeIndicator();
|
|
}
|
|
|
|
|
|
function dualPatchEdit(patchID, callback) {
|
|
document.getElementById("dualPatchMenu").style.display = "none";
|
|
var edgeDetails = network.body.data.edges.get(patchID);
|
|
$("#txtDualPatchName").val(edgeDetails.text);
|
|
openDrawer('dualpatch');
|
|
document.getElementById("btnUpdateDualPatch").onclick = updateDualPatch.bind(
|
|
this,
|
|
patchID,
|
|
callback
|
|
);
|
|
document.getElementById("btnCloseDualPatch").onclick = clearDualPatch.bind(
|
|
);
|
|
}
|
|
function updateDualPatch(patchID) {
|
|
|
|
var id = patchID;
|
|
var label = $("#txtDualPatchName").val().trim();
|
|
var patchDetails = network.body.data.edges.get(patchID);
|
|
|
|
if (nameLengthValidation("txtDualPatchName")) {
|
|
|
|
if (patchDetails.component_type == dualPatchJSON.component_type) {
|
|
|
|
var elabel = "";
|
|
elabel = label;
|
|
network.body.data.edges.update({
|
|
id: id, label: elabel, text: label
|
|
});
|
|
|
|
data.nodes.off("*", change_history_back);
|
|
data.edges.off("*", change_history_back);
|
|
multipleFiberService(patchDetails.from, patchDetails.to);
|
|
data.nodes.on("*", change_history_back);
|
|
data.edges.on("*", change_history_back);
|
|
clearDualPatch();
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
function clearDualPatch() {
|
|
|
|
$("#txtDualPatchName").val('');
|
|
closeDrawer('dualpatch');
|
|
UnSelectAll();
|
|
enableEdgeIndicator();
|
|
}
|
|
|
|
function serviceEdit(serviceID, callback) {
|
|
document.getElementById("serviceMenu").style.display = "none";
|
|
var edgeDetails = network.body.data.edges.get(serviceID);
|
|
$("#txtServiceName").val(edgeDetails.text);
|
|
var connectedNode = network.getConnectedNodes(serviceID);
|
|
$("#txtServiceSrc").val(network.body.data.nodes.get(connectedNode[0]).label);
|
|
$("#txtServiceDest").val(network.body.data.nodes.get(connectedNode[1]).label);
|
|
$("#txtBandwidth").val(edgeDetails.band_width);
|
|
openDrawer('service');
|
|
document.getElementById("btnUpdateService").onclick = updateService.bind(
|
|
this,
|
|
serviceID,
|
|
callback
|
|
);
|
|
document.getElementById("btnCloseService").onclick = clearService.bind(
|
|
);
|
|
}
|
|
function updateService(serviceID) {
|
|
|
|
var id = serviceID;
|
|
var label = $("#txtServiceName").val().trim();
|
|
var bandwidth = $("#txtBandwidth").val();
|
|
var serviceDetails = network.body.data.edges.get(serviceID);
|
|
|
|
if (nameLengthValidation("txtServiceName")) {
|
|
|
|
if (serviceDetails.component_type == serviceJSON.component_type) {
|
|
|
|
var elabel = "";
|
|
elabel = label;
|
|
network.body.data.edges.update({
|
|
id: id, label: elabel, text: label, band_width: bandwidth
|
|
});
|
|
data.nodes.off("*", change_history_back);
|
|
data.edges.off("*", change_history_back);
|
|
multipleFiberService(serviceDetails.from, serviceDetails.to);
|
|
data.nodes.on("*", change_history_back);
|
|
data.edges.on("*", change_history_back);
|
|
|
|
var tdata = network.body.data.edges.get(id);
|
|
tdata.isUpdate = true;
|
|
tempUndo.push(tdata);
|
|
|
|
clearService();
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
function deleteService(serviceID) {
|
|
|
|
var serviceDetails = network.body.data.edges.get(serviceID);
|
|
//var serviceLabel = serviceDetails.label;
|
|
//if (serviceDetails.label.trim() == "")
|
|
// serviceLabel = serviceDetails.text
|
|
|
|
//Swal.fire({
|
|
// icon: 'warning',
|
|
// title: '',
|
|
// text: 'Do you want to delete ' + serviceDetails.component_type + ' : ' + serviceLabel + ' ?',
|
|
// showCancelButton: true,
|
|
// confirmButtonText: "OK",
|
|
// closeOnConfirm: true,
|
|
// confirmButtonColor: '#49508a',
|
|
// width: 375,
|
|
// height: 200,
|
|
// allowOutsideClick: false
|
|
//}).then((result) => {
|
|
// if (result.value) {
|
|
document.getElementById("serviceMenu").style.display = "none";
|
|
var serviced = network.body.data.edges.get(serviceID);
|
|
network.body.data.edges.remove(serviceID);
|
|
multipleFiberService(serviceDetails.from, serviceDetails.to);
|
|
|
|
serviced.isDelete = true;
|
|
serviced.isUpdate = false;
|
|
tempUndo.push(serviced);
|
|
|
|
UnSelectAll();
|
|
enableEdgeIndicator();
|
|
// }
|
|
//});
|
|
|
|
|
|
}
|
|
function clearService() {
|
|
|
|
$("#txtServiceName").val('');
|
|
$("#txtServiceSrc").val('');
|
|
$("#txtServiceDest").val('');
|
|
$("#txtBandwidth").val('');
|
|
$("#ddlCentralFrq").val('');
|
|
closeDrawer('service');
|
|
UnSelectAll();
|
|
enableEdgeIndicator();
|
|
}
|
|
|
|
//end -- component edit, update, remove, clear
|
|
|
|
|
|
|
|
|
|
function closeMenu(menuID) {
|
|
document.getElementById(menuID).style.display = "none";
|
|
UnSelectAll();
|
|
|
|
}
|
|
|
|
//append node,preamp, booster type
|
|
function appendSinglePreAmpandBoosterType() {
|
|
|
|
if (eqpt_config['tip-photonic-equipment:amplifier']) {
|
|
$.each(eqpt_config['tip-photonic-equipment:amplifier'], function (index, item) {
|
|
$('#ddlPreAmpType').append('<option value="' + item.type + '">' + item.type + '</option>');
|
|
$('#ddlBoosterType').append('<option value="' + item.type + '">' + item.type + '</option>');
|
|
$('#ddlAmplifierType').append('<option value="' + item.type + '">' + item.type + '</option>');
|
|
});
|
|
}
|
|
}
|
|
|
|
//append node, preamp, booster type for dynamic ele
|
|
function appendPreAmpandBoosterType(ddlID) {
|
|
|
|
var preAmpType = [];
|
|
var boosterType = [];
|
|
|
|
var ddlroadmtype = "#" + eleroadmtype + ddlID;
|
|
var ddlpreamptype = "#" + elepreamptype + ddlID;
|
|
var ddlboostertype = "#" + eleboostertype + ddlID;
|
|
|
|
if (eqpt_config["tip-photonic-equipment:amplifier"]) {
|
|
$.each(eqpt_config['tip-photonic-equipment:amplifier'], function (index, item) {
|
|
$(ddlpreamptype).append('<option value="' + item.type + '">' + item.type + '</option>');
|
|
$(ddlboostertype).append('<option value="' + item.type + '">' + item.type + '</option>');
|
|
});
|
|
}
|
|
|
|
if (eqpt_config["tip-photonic-equipment:roadm"]) {
|
|
$.each(eqpt_config["tip-photonic-equipment:roadm"], function (index, item) {
|
|
//preAmpType = item["compatible-preamp"];
|
|
//boosterType = item["compatible-booster"];
|
|
//$.each(preAmpType, function (i, preAmp) {
|
|
// $(ddlpreamptype).append('<option value="' + preAmp + '">' + preAmp + '</option>');
|
|
//});
|
|
//$.each(boosterType, function (j, boosterAmp) {
|
|
// $(ddlboostertype).append('<option value="' + boosterAmp + '">' + boosterAmp + '</option>');
|
|
//});
|
|
$(ddlroadmtype).append('<option value="' + item.type + '">' + item.type + '</option>');
|
|
|
|
});
|
|
}
|
|
}
|
|
|
|
//show context menu on righ click of the component
|
|
function showContextMenu(x, y, menu) {
|
|
|
|
showHideDrawerandMenu();
|
|
|
|
var windowHeight = $(window).height() / 2;
|
|
var windowWidth = $(window).width() / 2;
|
|
|
|
var element = "#" + menu;
|
|
if (y > windowHeight && x <= windowWidth) {
|
|
$(element).css("left", x);
|
|
$(element).css("bottom", $(window).height() - y);
|
|
$(element).css("right", "auto");
|
|
$(element).css("top", "auto");
|
|
} else if (y > windowHeight && x > windowWidth) {
|
|
//When user click on bottom-right part of window
|
|
$(element).css("right", $(window).width() - x);
|
|
$(element).css("bottom", $(window).height() - y);
|
|
$(element).css("left", "auto");
|
|
$(element).css("top", "auto");
|
|
} else if (y <= windowHeight && x <= windowWidth) {
|
|
//When user click on top-left part of window
|
|
$(element).css("left", x);
|
|
$(element).css("top", y);
|
|
$(element).css("right", "auto");
|
|
$(element).css("bottom", "auto");
|
|
} else {
|
|
//When user click on top-right part of window
|
|
$(element).css("right", $(window).width() - x);
|
|
$(element).css("top", y);
|
|
$(element).css("left", "auto");
|
|
$(element).css("bottom", "auto");
|
|
}
|
|
document.getElementById(menu).style.display = "block";
|
|
}
|
|
|
|
//show fiber and service details when hover the mouse over on it
|
|
function showHoverDiv(x, y, menu) {
|
|
|
|
var windowHeight = $(window).height() / 2;
|
|
var windowWidth = $(window).width() / 2;
|
|
|
|
var element = "#" + menu;
|
|
if (y > windowHeight && x <= windowWidth) {
|
|
$(element).css("left", x);
|
|
$(element).css("bottom", $(window).height() - y);
|
|
$(element).css("right", "auto");
|
|
$(element).css("top", "auto");
|
|
} else if (y > windowHeight && x > windowWidth) {
|
|
//When user click on bottom-right part of window
|
|
$(element).css("right", $(window).width() - x);
|
|
$(element).css("bottom", $(window).height() - y);
|
|
$(element).css("left", "auto");
|
|
$(element).css("top", "auto");
|
|
} else if (y <= windowHeight && x <= windowWidth) {
|
|
//When user click on top-left part of window
|
|
$(element).css("left", x);
|
|
$(element).css("top", y);
|
|
$(element).css("right", "auto");
|
|
$(element).css("bottom", "auto");
|
|
} else {
|
|
//When user click on top-right part of window
|
|
$(element).css("right", $(window).width() - x);
|
|
$(element).css("top", y);
|
|
$(element).css("left", "auto");
|
|
$(element).css("bottom", "auto");
|
|
}
|
|
document.getElementById(menu).style.display = "block";
|
|
}
|
|
|
|
var showMenu = 0;
|
|
function networkValidation() {
|
|
var flag = false;
|
|
if (network.body.data.nodes.get().length > 0 || network.body.data.edges.get().length > 0)
|
|
flag = true;
|
|
else {
|
|
showMessage(alertType.Info, 'Please create network topology');
|
|
}
|
|
|
|
return flag;
|
|
}
|
|
|
|
function loadRoadmType(fiberID, nodeID, node_type, appendElement) {
|
|
var appendDiv = "#" + appendElement
|
|
var fiberDetails = network.body.data.edges.get(fiberID);
|
|
var roadmType = "";
|
|
if (fiberDetails.from == nodeID || fiberDetails.to == nodeID) {
|
|
$(appendDiv).show();
|
|
var connectedNodes = network.getConnectedNodes(fiberID);
|
|
if (fiberDetails.from == nodeID)
|
|
roadmType = node_type.toUpperCase() + "- [" + network.body.data.nodes.get(connectedNodes[0]).label + ' - ' + network.body.data.nodes.get(connectedNodes[1]).label + ' ]';
|
|
if (fiberDetails.to == nodeID)
|
|
roadmType = node_type.toUpperCase() + "- [" + network.body.data.nodes.get(connectedNodes[1]).label + ' - ' + network.body.data.nodes.get(connectedNodes[0]).label + ' ]';
|
|
|
|
var roadmAccordian = "";
|
|
roadmAccordian = "<div class='accordion-fiber'>";
|
|
roadmAccordian += "<p class='title m-0 f-s-17' id=" + fiberID + ">" + roadmType + "</p>";
|
|
roadmAccordian += "<span class='show-fiber'>+</span>"
|
|
roadmAccordian += "</div>";
|
|
|
|
roadmAccordian += "<div class='info-fiber'><div class='panel'>";
|
|
|
|
if (node_type == roadmJSON.node_type) {
|
|
roadmAccordian += generateAccordianEle("ROADM Type", eleroadmtype + fiberID);
|
|
}
|
|
roadmAccordian += generateAccordianEle("Amplifier A", elepreamptype + fiberID);
|
|
roadmAccordian += generateAccordianEle("Amplifier B", eleboostertype + fiberID);
|
|
|
|
roadmAccordian += "</div></div>";
|
|
|
|
$(appendDiv).append(roadmAccordian);
|
|
accordianFun();
|
|
appendPreAmpandBoosterType(fiberID);
|
|
getRoadmDetails(fiberID, node_type);
|
|
}
|
|
}
|
|
function generateAccordianEle(label, ddlEleID) {
|
|
var eleHtml = "";
|
|
eleHtml += "<div class='form-group'>";
|
|
eleHtml += "<label class='f-s-17'>" + label + "</label>";
|
|
eleHtml += "<select id='" + ddlEleID + "' class='form-control'></select>";
|
|
eleHtml += "</div>";
|
|
return eleHtml;
|
|
}
|
|
|
|
|
|
function getRoadmDetails(fiberID, node_type) {
|
|
if (_roadmListDB({ roadm_fiber_id: fiberID }).count() > 0) {
|
|
var roadmDetails = _roadmListDB({ roadm_fiber_id: fiberID }).first();
|
|
var lroadmtype = "#" + eleroadmtype + fiberID;
|
|
var lpreamptype = "#" + elepreamptype + fiberID;
|
|
var lboostertype = "#" + eleboostertype + fiberID;
|
|
if (node_type == roadmJSON.node_type) {
|
|
$(lroadmtype).val(roadmDetails.roadm_type);
|
|
}
|
|
$(lpreamptype).val(roadmDetails.pre_amp_type);
|
|
$(lboostertype).val(roadmDetails.booster_type);
|
|
}
|
|
else {
|
|
if (node_type == roadmJSON.node_type)
|
|
clearRoadm();
|
|
if (node_type == ILAJSON.amp_category)
|
|
clearILA();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function change_history_back() {
|
|
|
|
history_list_back.unshift({
|
|
nodes_his: data.nodes.get(data.nodes.getIds()),
|
|
edges_his: data.edges.get(data.edges.getIds())
|
|
});
|
|
|
|
//reset forward history
|
|
history_list_forward = [];
|
|
// apply css
|
|
css_for_undo_redo_chnage();
|
|
|
|
}
|
|
function redo_css_active() {
|
|
$("#button_undo").css({
|
|
"background-color": "inherit",
|
|
color: "white",
|
|
cursor: "pointer"
|
|
});
|
|
};
|
|
function undo_css_active() {
|
|
$("#button_redo").css({
|
|
"background-color": "inherit",
|
|
color: "white",
|
|
cursor: "pointer"
|
|
});
|
|
};
|
|
|
|
function redo_css_inactive() {
|
|
$("#button_undo").css({
|
|
"background-color": "inherit",
|
|
color: "#878787",
|
|
cursor: "inherit"
|
|
});
|
|
};
|
|
|
|
function undo_css_inactive() {
|
|
$("#button_redo").css({
|
|
"background-color": "inherit",
|
|
color: "#878787",
|
|
cursor: "inherit"
|
|
});
|
|
};
|
|
|
|
function css_for_undo_redo_chnage() {
|
|
if (history_list_back.length === 1) {
|
|
redo_css_inactive();
|
|
} else {
|
|
redo_css_active();
|
|
};
|
|
if (history_list_forward.length === 0) {
|
|
undo_css_inactive();
|
|
} else {
|
|
undo_css_active();
|
|
};
|
|
};
|
|
|
|
function nodeName(node_type, amp_category) {
|
|
const number = [];
|
|
var nodeList = [];
|
|
var nodeCount = 1;
|
|
var labelName = "";
|
|
var nodeDetails;
|
|
|
|
if (amp_category)
|
|
nodeDetails = configData.node[amp_category];
|
|
else
|
|
nodeDetails = configData.node[node_type];
|
|
|
|
if ($("#ddlNetworkView").val() == topologyView.Functional_View) {
|
|
labelName = nodeDetails.default.FV_label;
|
|
if (amp_category) {
|
|
|
|
if (node_type == ramanampJSON.amp_category) {
|
|
nodeList = network.body.data.nodes.get({
|
|
filter: function (item) {
|
|
return (item.node_type == ramanampJSON.node_type && item.amp_category == amp_category && item.view == topologyView.Functional_View);
|
|
}
|
|
});
|
|
}
|
|
else {
|
|
nodeList = network.body.data.nodes.get({
|
|
filter: function (item) {
|
|
return (item.node_type == node_type && item.amp_category == amp_category && item.view == topologyView.Functional_View);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
else {
|
|
nodeList = network.body.data.nodes.get({
|
|
filter: function (item) {
|
|
return (item.node_type == node_type && item.view == topologyView.Functional_View);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
else if ($("#ddlNetworkView").val() == topologyView.NE_View) {
|
|
labelName = nodeDetails.default.label;
|
|
if (node_type == transceiverJSON.node_type) {
|
|
nodeList = network.body.data.nodes.get({
|
|
filter: function (item) {
|
|
return (item.node_type == transceiverJSON.node_type && item.view == topologyView.NE_View);
|
|
}
|
|
});
|
|
}
|
|
else {
|
|
nodeList = network.body.data.nodes.get({
|
|
filter: function (item) {
|
|
return (item.node_type != transceiverJSON.node_type && item.view == topologyView.NE_View);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
$.each(nodeList, function (index, item) {
|
|
var splitName = item.label.split(' ');
|
|
var checkNumber = Number(splitName[splitName.length - 1]);
|
|
if (checkNumber)
|
|
number.push(checkNumber);
|
|
});
|
|
|
|
if (number.length > 0)
|
|
nodeCount = number.sort((f, s) => f - s)[number.length - 1] + 1;
|
|
|
|
return { label: labelName + nodeCount, nodeLength: nodeCount };
|
|
|
|
}
|
|
|
|
function getLabel(from, to, component_type) {
|
|
var flabel;
|
|
var tlabel;
|
|
|
|
if (network.body.data.nodes.get(from).number)
|
|
flabel = network.body.data.nodes.get(from).number;
|
|
else
|
|
flabel = network.body.data.nodes.get(from).label;
|
|
|
|
if (network.body.data.nodes.get(to).number)
|
|
tlabel = network.body.data.nodes.get(to).number;
|
|
else
|
|
tlabel = network.body.data.nodes.get(to).label;
|
|
|
|
return component_type + " " + flabel + ' - ' + tlabel;
|
|
}
|
|
|
|
function saveSimulations(fre_min, frq_max, spacing, channel, margin) {
|
|
var simulationPara = {
|
|
"frequency-min": fre_min,
|
|
"frequency-max": frq_max,
|
|
"spacing": spacing,
|
|
"noOfChannel": channel,
|
|
"system-margin": margin
|
|
}
|
|
sessionStorage.setItem("simulationParameters", JSON.stringify(simulationPara));
|
|
}
|
|
|
|
function showMessage(messageType, textmsg, removeTimeout) {
|
|
$("#img_src").show();
|
|
switch (messageType) {
|
|
case alertType.Success:
|
|
|
|
$('#msg_content').html(textmsg);
|
|
$('#caption').text(Object.keys(alertType).find(key => alertType[key] === alertType.Success));
|
|
var successrc1 = "./Assets/img/success-toaster.png";
|
|
$("#img_src").attr("src", successrc1);
|
|
$('#toast').removeClass("info-toast");
|
|
$('#toast').removeClass("danger-toast-error-listing");
|
|
$('#toast').removeClass("danger-toast");
|
|
$('#toast').removeClass("warning-toast");
|
|
$('#toast').addClass("success-toast");
|
|
clearAndSetTimeout(".success-toast");
|
|
break;
|
|
case alertType.Info:
|
|
$('#msg_content').html(textmsg);
|
|
$('#caption').text(Object.keys(alertType).find(key => alertType[key] === alertType.Info));
|
|
var infosrc = "./Assets/img/info-toaster.png";
|
|
$("#img_src").attr("src", infosrc);
|
|
$('#toast').removeClass("success-toast");
|
|
$('#toast').removeClass("danger-toast-error-listing");
|
|
$('#toast').removeClass("danger-toast");
|
|
$('#toast').removeClass("warning-toast");
|
|
$('#toast').addClass("info-toast");
|
|
clearAndSetTimeout(".info-toast");
|
|
break;
|
|
case alertType.Error:
|
|
$('#msg_content').html(textmsg);
|
|
var dangersrc;
|
|
$('#toast').removeClass("success-toast");
|
|
$('#toast').removeClass("info-toast");
|
|
$('#toast').removeClass("warning-toast");
|
|
$('#toast').removeClass("danger-toast-error-listing");
|
|
$('#toast').removeClass("danger-toast");
|
|
dangersrc = "./Assets/img/error-toaster.png";
|
|
$("#img_src").attr("src", dangersrc);
|
|
if (!removeTimeout) {
|
|
$('#caption').text(Object.keys(alertType).find(key => alertType[key] === alertType.Error));
|
|
|
|
$('#toast').addClass("danger-toast");
|
|
clearAndSetTimeout(".danger-toast", removeTimeout);
|
|
}
|
|
else {
|
|
$("#img_src").hide();
|
|
$('#caption').text('Messages');
|
|
//dangersrc = "./Assets/img/error-listing-icon.png";
|
|
$('#toast').addClass("danger-toast-error-listing");
|
|
clearAndSetTimeout(".danger-toast-error-listing", removeTimeout);
|
|
}
|
|
|
|
|
|
break;
|
|
case alertType.Warning:
|
|
$('#msg_content').html(textmsg);
|
|
$('#caption').text(Object.keys(alertType).find(key => alertType[key] === alertType.Warning));
|
|
var warningsrc = "./Assets/img/warning-toaster.png";
|
|
$("#img_src").attr("src", warningsrc);
|
|
$('#toast').removeClass("success-toast");
|
|
$('#toast').removeClass("info-toast");
|
|
$('#toast').removeClass("danger-toast-error-listing");
|
|
$('#toast').removeClass("danger-toast");
|
|
$('#toast').addClass("warning-toast");
|
|
clearAndSetTimeout(".warning-toast");
|
|
break;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
function clearAndSetTimeout(targetEle, removeTimeout) {
|
|
const highestId = window.setTimeout(() => {
|
|
for (let i = highestId; i >= 0; i--) {
|
|
window.clearInterval(i);
|
|
}
|
|
}, 0);
|
|
$(targetEle).toast('show');
|
|
if (!removeTimeout) {
|
|
setTimeout(function () {
|
|
$(targetEle).toast('hide');
|
|
}, 6000);
|
|
}
|
|
}
|
|
|
|
function enableEdgeIndicator() {
|
|
if (isDualFiberMode == 1 || isSingleFiberMode == 1 || isSinglePatchMode == 1 || isDualPatchMode == 1 || isAddService == 1)
|
|
network.addEdgeMode();
|
|
}
|
|
|
|
function nodeRule(from, to, nodeType) {
|
|
var fromConnections = network.getConnectedEdges(from);
|
|
var toConnections = network.getConnectedEdges(to);
|
|
|
|
//var tempFrom = [];
|
|
//var tempTo = [];
|
|
//if (nodeType == transceiverJSON.node_type) {
|
|
// $.each(fromConnections, function (index, item) {
|
|
// if (network.body.data.edges.get(item).component_type != serviceJSON.component_type)
|
|
// tempFrom.push(item);
|
|
// });
|
|
|
|
// $.each(toConnections, function (index, item) {
|
|
// if (network.body.data.edges.get(item).component_type != serviceJSON.component_type)
|
|
// tempTo.push(item);
|
|
// });
|
|
// fromConnections = tempFrom;
|
|
// toConnections = tempTo;
|
|
//}
|
|
|
|
var connections = [];
|
|
connections.push(fromConnections);
|
|
|
|
$.each(toConnections, function (index, item) {
|
|
connections.push(item);
|
|
});
|
|
|
|
var fromDetails = network.body.data.nodes.get(from);
|
|
var toDetails = network.body.data.nodes.get(to);
|
|
|
|
var message = "";
|
|
var flag = false;
|
|
var connectedNodes;
|
|
var fromType;
|
|
var toType;
|
|
//to check connection b/w roadm and amplifier
|
|
|
|
|
|
if ((fromDetails.node_type == roadmJSON.node_type && toDetails.node_type == nodeType) || (toDetails.node_type == roadmJSON.node_type && fromDetails.node_type == nodeType) || (fromDetails.node_type == transceiverJSON.node_type && toDetails.node_type == nodeType) || (toDetails.node_type == transceiverJSON.node_type && fromDetails.node_type == nodeType)) {
|
|
$.each(connections, function (index, item) {
|
|
connectedNodes = network.getConnectedNodes(item);
|
|
if (connectedNodes) {
|
|
if ((connectedNodes[0] == fromDetails.id && connectedNodes[1] == toDetails.id) || connectedNodes[1] == fromDetails.id && connectedNodes[0] == toDetails.id) {
|
|
message = "We cannot add more than one " + singleFiberJSON.component_type + "/" + singlePatchJSON.component_type + " connection between " + fromDetails.label + " and " + toDetails.label;
|
|
flag = true;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
//to check connection b/w roadm and transceiver
|
|
//if ((fromDetails.node_type == roadmJSON.node_type && toDetails.node_type == transceiverJSON.node_type) || (toDetails.node_type == roadmJSON.node_type && fromDetails.node_type == transceiverJSON.node_type)) {
|
|
|
|
//}
|
|
|
|
// to check connection b/w amplifier and amplifier
|
|
|
|
if (fromDetails.node_type == nodeType && toDetails.node_type == nodeType) {
|
|
$.each(connections, function (index, item) {
|
|
connectedNodes = network.getConnectedNodes(item);
|
|
if (connectedNodes) {
|
|
if ((connectedNodes[0] == fromDetails.id && connectedNodes[1] == toDetails.id) || connectedNodes[1] == fromDetails.id && connectedNodes[0] == toDetails.id) {
|
|
message = "We cannot add more than one " + singleFiberJSON.component_type + "/" + singlePatchJSON.component_type + " connection between " + fromDetails.label + " and " + toDetails.label;
|
|
flag = true;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
var edgeDetails;
|
|
var nodetype;
|
|
if (!flag) {
|
|
message = "";
|
|
if (fromDetails.node_type == nodeType) {
|
|
if (fromConnections.length > 1) {
|
|
message = fromDetails.label + ' can only support 2 links, one outgoing, and one incoming. ';
|
|
flag = true;
|
|
}
|
|
else {
|
|
$.each(fromConnections, function (index, item) {
|
|
edgeDetails = network.body.data.edges.get(item);
|
|
if (edgeDetails.from == from) {
|
|
message = 'Links wrongly connected. ';
|
|
flag = true;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
if (toDetails.node_type == nodeType) {
|
|
if (toConnections.length > 1) {
|
|
|
|
if (message != "")
|
|
message += "<br /> <br />" + toDetails.label + ' can only support 2 links, one outgoing, and one incoming';
|
|
else
|
|
message += toDetails.label + ' can only support 2 links, one outgoing, and one incoming';
|
|
flag = true;
|
|
}
|
|
else {
|
|
$.each(toConnections, function (index, item) {
|
|
edgeDetails = network.body.data.edges.get(item);
|
|
if (edgeDetails.to == to) {
|
|
message = 'Links wrongly connected. ';
|
|
flag = true;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
return { message: message, flag: flag };
|
|
}
|
|
|
|
function checkLink() {
|
|
|
|
var roadmList = network.body.data.nodes.get({
|
|
filter: function (item) {
|
|
return (item.node_type == roadmJSON.node_type || item.node_type == transceiverJSON.node_type);
|
|
}
|
|
});
|
|
|
|
var connectedEdges;
|
|
var fromCount = 0;
|
|
var toCount = 0;
|
|
var edgeDetails;
|
|
var message;
|
|
var flag = false;
|
|
var msg = [];
|
|
var tempEdge = [];
|
|
$.each(roadmList, function (index, item) {
|
|
connectedEdges = network.getConnectedEdges(item.id);
|
|
|
|
tempEdge = [];
|
|
$.each(connectedEdges, function (index, item1) {
|
|
if (network.body.data.edges.get(item1).component_type != serviceJSON.component_type)
|
|
tempEdge.push(item1);
|
|
});
|
|
|
|
fromCount = 0;
|
|
toCount = 0;
|
|
for (i = 0; i < tempEdge.length; i++) {
|
|
edgeDetails = network.body.data.edges.get(tempEdge[i]);
|
|
if (edgeDetails.from == item.id)
|
|
fromCount++;
|
|
else if (edgeDetails.to == item.id)
|
|
toCount++;
|
|
}
|
|
|
|
if (fromCount != toCount || (fromCount == 0 && toCount == 0)) {
|
|
msg.push('<p class="focusNode" title="Click here to focus the node" id=\'span' + item.id.replace(/\s/g, '') + '\' onClick="focusNode(\'' + item.id + '\',1)"><img width="25" src="./Assets/img/error-listing-icon.png"> <b>' + item.label + '</b> must have an even number of links with an equal number of incoming and outgoing links.</p>');
|
|
flag = true;
|
|
}
|
|
if (item.node_type == transceiverJSON.node_type) {
|
|
if (!item.transceiver_type) {
|
|
msg.push('<p class="focusNode" title="Click here to focus the node" id=\'spanTF' + item.id.replace(/\s/g, '') + '\' onClick="focusNode(\'' + item.id + '\',1)"><img width="25" src="./Assets/img/error-listing-icon.png"> <b>' + item.label + '</b> - ' + transceiverJSON.node_type + ' type not entered by the user.</p>');
|
|
flag = true;
|
|
}
|
|
}
|
|
else if (item.node_type == roadmJSON.node_type) {
|
|
if (!item.roadm_type) {
|
|
msg.push('<p class="focusNode" title="Click here to focus the node" id=\'spanTF' + item.id.replace(/\s/g, '') + '\' onClick="focusNode(\'' + item.id + '\',1)"><img width="25" src="./Assets/img/error-listing-icon.png"> <b>' + item.label + '</b> - ' + roadmJSON.node_type.toUpperCase() + ' type not entered by the user.</p>');
|
|
flag = true;
|
|
}
|
|
}
|
|
|
|
});
|
|
|
|
|
|
//message = msg.join(' ') + " must have an even number of links with an equal number of incoming and outgoing links";
|
|
message = msg.join(' ');
|
|
return { message: message, flag: flag };
|
|
}
|
|
|
|
function checkMisLink() {
|
|
|
|
var roadmList = network.body.data.nodes.get({
|
|
filter: function (item) {
|
|
return (item.node_type == amplifierJSON.node_type || item.node_type == fusedJSON.node_type);
|
|
}
|
|
});
|
|
|
|
var connectedEdges;
|
|
var message;
|
|
var flag = false;
|
|
var msg = [];
|
|
var tempEdge = [];
|
|
var fromCount;
|
|
var toCount;
|
|
$.each(roadmList, function (index, item) {
|
|
connectedEdges = network.getConnectedEdges(item.id);
|
|
fromCount = 0;
|
|
toCount = 0;
|
|
for (i = 0; i < connectedEdges.length; i++) {
|
|
edgeDetails = network.body.data.edges.get(connectedEdges[i]);
|
|
if (edgeDetails.from == item.id)
|
|
fromCount++;
|
|
else if (edgeDetails.to == item.id)
|
|
toCount++;
|
|
}
|
|
|
|
//if (fromCount != toCount || (fromCount == 0 && toCount == 0) || fromCount > 1 || toCount > 1 ) {
|
|
// msg.push('<p class="focusNode" title="Click here to focus the node" id=\'span' + item.id.replace(/\s/g, '') + '\' onClick="focusNode(\'' + item.id + '\')"><img width="25" src="./Assets/img/error-listing-icon.png"> One or more links to <b>' + item.label + '</b> is missing.</p>');
|
|
// flag = true;
|
|
//}
|
|
if (connectedEdges.length <= 1) {
|
|
msg.push('<p class="focusNode" title="Click here to focus the node" id=\'span' + item.id.replace(/\s/g, '') + '\' onClick="focusNode(\'' + item.id + '\',1)"><img width="25" src="./Assets/img/error-listing-icon.png"> One or more links to <b>' + item.label + '</b> is missing.</p>');
|
|
flag = true;
|
|
}
|
|
else if (connectedEdges.length > 1) {
|
|
|
|
if ((connectedEdges.length == 2 && fromCount == 2) || (connectedEdges.length == 2 && toCount == 2)) {
|
|
msg.push('<p class="focusNode" title="Click here to focus the node" id=\'span' + item.id.replace(/\s/g, '') + '\' onClick="focusNode(\'' + item.id + '\',1)"><img width="25" src="./Assets/img/error-listing-icon.png"><b>' + item.label + '</b> cannot support 2 links of the same type, must have one incoming and one outgoing link</p>');
|
|
flag = true;
|
|
}
|
|
else if (fromCount != toCount || connectedEdges.length > 2) {
|
|
msg.push('<p class="focusNode" title="Click here to focus the node" id=\'span' + item.id.replace(/\s/g, '') + '\' onClick="focusNode(\'' + item.id + '\',1)"><img width="25" src="./Assets/img/error-listing-icon.png"><b>' + item.label + '</b> cannot support more than 2 links</p>');
|
|
flag = true;
|
|
}
|
|
}
|
|
|
|
if (item.node_type == amplifierJSON.node_type) {
|
|
if (item.amp_category == amplifierJSON.amp_category) {
|
|
if (!item.amp_type) {
|
|
msg.push('<p class="focusNode" title="Click here to focus the node" id=\'spanTF' + item.id.replace(/\s/g, '') + '\' onClick="focusNode(\'' + item.id + '\',1)"><img width="25" src="./Assets/img/error-listing-icon.png"> <b>' + item.label + '</b> - ' + amplifierJSON.amp_category + ' type not entered by the user.</p>');
|
|
flag = true;
|
|
}
|
|
|
|
}
|
|
else if (item.amp_category == ramanampJSON.amp_category) {
|
|
if (!item.amp_type) {
|
|
msg.push('<p class="focusNode" title="Click here to focus the node" id=\'spanTF' + item.id.replace(/\s/g, '') + '\' onClick="focusNode(\'' + item.id + '\',1)"><img width="25" src="./Assets/img/error-listing-icon.png"> <b>' + item.label + '</b> - Raman amplifier type not entered by the user.</p>');
|
|
flag = true;
|
|
}
|
|
if (!item.category) {
|
|
msg.push('<p class="focusNode" title="Click here to focus the node" id=\'spanTF' + item.id.replace(/\s/g, '') + '\' onClick="focusNode(\'' + item.id + '\',1)"><img width="25" src="./Assets/img/error-listing-icon.png"> <b>' + item.label + '</b> - Raman amplifier category not entered by the user.</p>');
|
|
flag = true;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
});
|
|
|
|
//var sorp = ' is';
|
|
//if (msg.length > 1)
|
|
// sorp = ' are'
|
|
//message = "One or more links to " + msg.join(' ') + sorp + " missing";
|
|
message = msg.join(' ');
|
|
return { message: message, flag: flag };
|
|
}
|
|
|
|
function checkTypeForce() {
|
|
|
|
var transList = network.body.data.nodes.get({
|
|
filter: function (item) {
|
|
return (item.node_type == transceiverJSON.node_type || item.node_type == amplifierJSON.node_type || item.node_type == roadmJSON.node_type);
|
|
}
|
|
});
|
|
|
|
var message;
|
|
var msg = [];
|
|
var flag = false;
|
|
$.each(transList, function (index, item) {
|
|
|
|
if (item.node_type == transceiverJSON.node_type) {
|
|
if (!item.transceiver_type) {
|
|
msg.push('<p class="focusNode" title="Click here to focus the node" id=\'spanTF' + item.id.replace(/\s/g, '') + '\' onClick="focusNode(\'' + item.id + '\',1)"><img width="25" src="./Assets/img/error-listing-icon.png"> <b>' + item.label + '</b> - ' + transceiverJSON.node_type + ' type not entered by the user.</p>');
|
|
flag = true;
|
|
}
|
|
}
|
|
else if (item.node_type == roadmJSON.node_type) {
|
|
if (!item.roadm_type) {
|
|
msg.push('<p class="focusNode" title="Click here to focus the node" id=\'spanTF' + item.id.replace(/\s/g, '') + '\' onClick="focusNode(\'' + item.id + '\',1)"><img width="25" src="./Assets/img/error-listing-icon.png"> <b>' + item.label + '</b> - ' + roadmJSON.node_type.toUpperCase() + ' type not entered by the user.</p>');
|
|
flag = true;
|
|
}
|
|
}
|
|
else if (item.node_type == amplifierJSON.node_type) {
|
|
if (item.amp_category == amplifierJSON.amp_category) {
|
|
if (!item.amp_type) {
|
|
msg.push('<p class="focusNode" title="Click here to focus the node" id=\'spanTF' + item.id.replace(/\s/g, '') + '\' onClick="focusNode(\'' + item.id + '\',1)"><img width="25" src="./Assets/img/error-listing-icon.png"> <b>' + item.label + '</b> - ' + amplifierJSON.amp_category + ' type not entered by the user.</p>');
|
|
flag = true;
|
|
}
|
|
|
|
}
|
|
else if (item.amp_category == ramanampJSON.amp_category) {
|
|
if (!item.amp_type) {
|
|
msg.push('<p class="focusNode" title="Click here to focus the node" id=\'spanTF' + item.id.replace(/\s/g, '') + '\' onClick="focusNode(\'' + item.id + '\',1)"><img width="25" src="./Assets/img/error-listing-icon.png"> <b>' + item.label + '</b> - Raman amplifier type not entered by the user.</p>');
|
|
flag = true;
|
|
}
|
|
if (!item.category) {
|
|
msg.push('<p class="focusNode" title="Click here to focus the node" id=\'spanTF' + item.id.replace(/\s/g, '') + '\' onClick="focusNode(\'' + item.id + '\',1)"><img width="25" src="./Assets/img/error-listing-icon.png"> <b>' + item.label + '</b> - Raman amplifier category not entered by the user.</p>');
|
|
flag = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
//var sorp = ' is';
|
|
//if (msg.length > 1)
|
|
// sorp = ' are'
|
|
//message = "One or more links to " + msg.join(' ') + sorp + " missing";
|
|
message = msg.join(' ');
|
|
return { message: message, flag: flag };
|
|
}
|
|
|
|
function checkFiberPro() {
|
|
|
|
var fiberList = network.body.data.edges.get({
|
|
filter: function (item) {
|
|
return (item.fiber_category == singleFiberJSON.fiber_category);
|
|
}
|
|
});
|
|
|
|
var message;
|
|
var msg = [];
|
|
var flag = false;
|
|
var spanlen;
|
|
var span_length;
|
|
$.each(fiberList, function (index, item) {
|
|
span_length = item.span_length;
|
|
spanlen = parseFloat(span_length);
|
|
if (item.fiber_type == "") {
|
|
msg.push('<p class="focusNode" title="Click here to focus the fiber" id=\'spanFP' + item.id.replace(/\s/g, '') + '\' onClick="focusNode(\'' + item.id + '\',2)"><img width="25" src="./Assets/img/error-listing-icon.png"> <b>' + item.label + '</b> - ' + singleFiberJSON.component_type + ' type not entered by the user.</p>');
|
|
flag = true;
|
|
}
|
|
if (isNaN(span_length) || spanlen <= 0 || span_length == "") {
|
|
msg.push('<p class="focusNode" title="Click here to focus the fiber" id=\'spanFP' + item.id.replace(/\s/g, '') + '\' onClick="focusNode(\'' + item.id + '\',2)"><img width="25" src="./Assets/img/error-listing-icon.png"> <b>' + item.label + '</b> - ' + singleFiberJSON.component_type + ' length not entered by the user.</p>');
|
|
flag = true;
|
|
}
|
|
|
|
});
|
|
|
|
message = msg.join(' ');
|
|
return { message: message, flag: flag };
|
|
}
|
|
|
|
function topologyValidation(isTime) {
|
|
//removeHighlight();
|
|
var flag = false;
|
|
var message = [];
|
|
var response = checkLink();
|
|
if (response.flag) {
|
|
flag = true
|
|
message.push("<span id=spanEven>" + response.message + "</span>");
|
|
}
|
|
|
|
response = checkMisLink();
|
|
if (response.flag) {
|
|
flag = true;
|
|
message.push("<span id=spanMisLink>" + response.message + "</span>");
|
|
}
|
|
|
|
response = checkFiberPro();
|
|
if (response.flag) {
|
|
flag = true;
|
|
message.push("<span id=spanTransForce>" + response.message + "</span>");
|
|
}
|
|
|
|
//response = checkTypeForce();
|
|
//if (response.flag) {
|
|
// flag = true;
|
|
// message.push("<span id=spanTransForce>" + response.message + "</span>");
|
|
//}
|
|
|
|
if (flag) {
|
|
showMessage(alertType.Error, message.join(' '), isTime);
|
|
//return;
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
var preScale;
|
|
var prePosition;
|
|
function focusNode(ID, type) {
|
|
removeHighlight();
|
|
UnSelectAll();
|
|
if (type == 1) {
|
|
var image;
|
|
var scaleOption = { scale: 1.0 };
|
|
network.moveTo(scaleOption);
|
|
network.focus(ID);
|
|
image = "";
|
|
var nodeDetails = network.body.data.nodes.get(ID);
|
|
if (nodeDetails.node_type == roadmJSON.node_type)
|
|
image = roadmJSON.err_image;
|
|
else if (nodeDetails.node_type == fusedJSON.node_type)
|
|
image = fusedJSON.err_image;
|
|
else if (nodeDetails.node_type == transceiverJSON.node_type)
|
|
image = transceiverJSON.err_image;
|
|
else if (nodeDetails.amp_category == amplifierJSON.amp_category)
|
|
image = amplifierJSON.err_image;
|
|
else if (nodeDetails.amp_category == ramanampJSON.amp_category)
|
|
image = ramanampJSON.err_image;
|
|
|
|
data.nodes.off("*", change_history_back);
|
|
data.edges.off("*", change_history_back);
|
|
|
|
network.body.data.nodes.update([{ id: ID, pre_image: nodeDetails.image, image: DIR + image, size: roadmJSON.err_size, is_error: true }]);
|
|
|
|
data.nodes.on("*", change_history_back);
|
|
data.edges.on("*", change_history_back);
|
|
}
|
|
else if (type == 2) {
|
|
var edgeDetails = network.body.data.edges.get(ID);
|
|
|
|
var scaleOption = { scale: 1.0 };
|
|
network.moveTo(scaleOption);
|
|
network.focus(edgeDetails.from);
|
|
|
|
data.nodes.off("*", change_history_back);
|
|
data.edges.off("*", change_history_back);
|
|
|
|
network.body.data.edges.update([{ id: ID, pre_color: edgeDetails.color, color: singleFiberJSON.options.err_color, is_error: true }]);
|
|
data.nodes.on("*", change_history_back);
|
|
data.edges.on("*", change_history_back);
|
|
}
|
|
}
|
|
|
|
function removeHighlight() {
|
|
|
|
var errNodes = network.body.data.nodes.get({
|
|
filter: function (item) {
|
|
return (item.is_error == true);
|
|
}
|
|
});
|
|
|
|
for (var i = 0; i < errNodes.length; i++) {
|
|
var nodeDetails = errNodes[i];
|
|
//if (nodeDetails.node_type == roadmJSON.node_type)
|
|
// image = roadmJSON.image;
|
|
//else if (nodeDetails.node_type == fusedJSON.node_type)
|
|
// image = fusedJSON.image;
|
|
//else if (nodeDetails.node_type == transceiverJSON.node_type)
|
|
// image = transceiverJSON.image;
|
|
//else if (nodeDetails.amp_category == amplifierJSON.amp_category)
|
|
// image = amplifierJSON.image;
|
|
//else if (nodeDetails.amp_category == ramanampJSON.amp_category)
|
|
// image = ramanampJSON.image;
|
|
data.nodes.off("*", change_history_back);
|
|
data.edges.off("*", change_history_back);
|
|
network.body.data.nodes.update({
|
|
id: nodeDetails.id, image: nodeDetails.pre_image, size: roadmJSON.size, is_error: false
|
|
});
|
|
data.nodes.on("*", change_history_back);
|
|
data.edges.on("*", change_history_back);
|
|
}
|
|
|
|
var errEdge = network.body.data.edges.get({
|
|
filter: function (item) {
|
|
return (item.is_error == true);
|
|
}
|
|
});
|
|
for (var i = 0; i < errEdge.length; i++) {
|
|
var edgeDetails = errEdge[i];
|
|
data.nodes.off("*", change_history_back);
|
|
data.edges.off("*", change_history_back);
|
|
network.body.data.edges.update({
|
|
id: edgeDetails.id, color: edgeDetails.pre_color, is_error: false
|
|
});
|
|
data.nodes.on("*", change_history_back);
|
|
data.edges.on("*", change_history_back);
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
function nodeValidationInEdge(cfrom, cto) {
|
|
// start remove highlight once roadm have equal in/out conn
|
|
var roadmList = [];
|
|
|
|
if (network.body.data.nodes.get(cfrom).node_type == roadmJSON.node_type)
|
|
roadmList.push(cfrom);
|
|
|
|
if (network.body.data.nodes.get(cto).node_type == roadmJSON.node_type)
|
|
roadmList.push(cto);
|
|
|
|
var connectedEdges;
|
|
var fromCount = 0;
|
|
var toCount = 0;
|
|
var edgeDetails;
|
|
$.each(roadmList, function (index, item) {
|
|
connectedEdges = network.getConnectedEdges(item);
|
|
fromCount = 0;
|
|
toCount = 0;
|
|
for (i = 0; i < connectedEdges.length; i++) {
|
|
edgeDetails = network.body.data.edges.get(connectedEdges[i]);
|
|
if (edgeDetails.from == item)
|
|
fromCount++;
|
|
else if (edgeDetails.to == item)
|
|
toCount++;
|
|
}
|
|
|
|
if (fromCount != toCount || (fromCount == 0 && toCount == 0)) {
|
|
//topologyValidation();
|
|
//alert(item + ' ok');
|
|
addNodeHighlight(item);
|
|
}
|
|
else {
|
|
if (network.body.data.nodes.get(item).roadm_type != "") {
|
|
removeSpanInError(item, true);
|
|
removeSpanInError(item);
|
|
}
|
|
else {
|
|
var removeID = "#span" + item.replace(/\s/g, '');
|
|
$(removeID).remove();
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
// end
|
|
|
|
//start mislink
|
|
roadmList = [];
|
|
if (network.body.data.nodes.get(cfrom).node_type == fusedJSON.node_type || network.body.data.nodes.get(cfrom).node_type == amplifierJSON.node_type)
|
|
roadmList.push(cfrom);
|
|
|
|
if (network.body.data.nodes.get(cto).node_type == fusedJSON.node_type || network.body.data.nodes.get(cto).node_type == amplifierJSON.node_type)
|
|
roadmList.push(cto);
|
|
|
|
|
|
$.each(roadmList, function (index, item) {
|
|
connectedEdges = network.getConnectedEdges(item);
|
|
fromCount = 0;
|
|
toCount = 0;
|
|
for (i = 0; i < connectedEdges.length; i++) {
|
|
edgeDetails = network.body.data.edges.get(connectedEdges[i]);
|
|
if (edgeDetails.from == item)
|
|
fromCount++;
|
|
else if (edgeDetails.to == item)
|
|
toCount++;
|
|
}
|
|
|
|
if (fromCount != toCount || (fromCount == 0 && toCount == 0) || fromCount > 1 || toCount > 1) {
|
|
addNodeHighlight(item);
|
|
}
|
|
else {
|
|
|
|
if (network.body.data.nodes.get(item).node_type == amplifierJSON.node_type) {
|
|
|
|
|
|
if (network.body.data.nodes.get(item).amp_category == amplifierJSON.amp_category) {
|
|
if (network.body.data.nodes.get(item).amp_type != "") {
|
|
removeSpanInError(item, true);
|
|
removeSpanInError(item);
|
|
}
|
|
else {
|
|
var removeID = "#span" + item.replace(/\s/g, '');
|
|
$(removeID).remove();
|
|
}
|
|
}
|
|
else if (network.body.data.nodes.get(item).amp_category == ramanampJSON.amp_category) {
|
|
if (network.body.data.nodes.get(item).amp_type != "" && (network.body.data.nodes.get(item).category)) {
|
|
removeSpanInError(item, true);
|
|
removeSpanInError(item);
|
|
}
|
|
else {
|
|
var removeID = "#span" + item.replace(/\s/g, '');
|
|
$(removeID).remove();
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
else {
|
|
removeSpanInError(item);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
//
|
|
|
|
// start remove highlight once transceiver have equal in/out conn
|
|
|
|
var tempEdge = [];
|
|
roadmList = [];
|
|
if (network.body.data.nodes.get(cfrom).node_type == transceiverJSON.node_type)
|
|
roadmList.push(cfrom);
|
|
|
|
if (network.body.data.nodes.get(cto).node_type == transceiverJSON.node_type)
|
|
roadmList.push(cto);
|
|
|
|
$.each(roadmList, function (index, item) {
|
|
connectedEdges = network.getConnectedEdges(item);
|
|
tempEdge = [];
|
|
$.each(connectedEdges, function (index, item1) {
|
|
if (network.body.data.edges.get(item1).component_type != serviceJSON.component_type)
|
|
tempEdge.push(item1);
|
|
});
|
|
fromCount = 0;
|
|
toCount = 0;
|
|
for (i = 0; i < tempEdge.length; i++) {
|
|
edgeDetails = network.body.data.edges.get(tempEdge[i]);
|
|
if (edgeDetails.from == item)
|
|
fromCount++;
|
|
else if (edgeDetails.to == item)
|
|
toCount++;
|
|
}
|
|
|
|
if (fromCount != toCount || (fromCount == 0 && toCount == 0)) {
|
|
addNodeHighlight(item);
|
|
}
|
|
else {
|
|
//removeSpanInError(item);
|
|
if (network.body.data.nodes.get(item).transceiver_type != "") {
|
|
removeSpanInError(item, true);
|
|
removeSpanInError(item);
|
|
}
|
|
else {
|
|
var removeID = "#span" + item.replace(/\s/g, '');
|
|
$(removeID).remove();
|
|
}
|
|
|
|
}
|
|
});
|
|
// end
|
|
|
|
realUpdate();
|
|
checkErrorFree();
|
|
|
|
//end
|
|
}
|
|
|
|
function removeSpanInError(item, transUpdate) {
|
|
|
|
var image;
|
|
var nodeDetails = network.body.data.nodes.get(item);
|
|
if (nodeDetails.node_type == roadmJSON.node_type)
|
|
image = roadmJSON.image;
|
|
else if (nodeDetails.node_type == fusedJSON.node_type)
|
|
image = fusedJSON.image;
|
|
else if (nodeDetails.node_type == transceiverJSON.node_type)
|
|
image = transceiverJSON.image;
|
|
else if (nodeDetails.amp_category == amplifierJSON.amp_category)
|
|
image = amplifierJSON.image;
|
|
else if (nodeDetails.amp_category == ramanampJSON.amp_category)
|
|
image = ramanampJSON.image;
|
|
|
|
data.nodes.off("*", change_history_back);
|
|
data.edges.off("*", change_history_back);
|
|
|
|
network.body.data.nodes.update({
|
|
id: nodeDetails.id, image: DIR + image, size: roadmJSON.size, is_error: false
|
|
});
|
|
|
|
//console.log(nodeDetails.id, DIR + image);
|
|
data.nodes.on("*", change_history_back);
|
|
data.edges.on("*", change_history_back);
|
|
|
|
var removeID;
|
|
|
|
if (transUpdate)
|
|
removeID = "#spanTF" + item.replace(/\s/g, '');
|
|
else
|
|
removeID = "#span" + item.replace(/\s/g, '');
|
|
|
|
$(removeID).remove();
|
|
checkErrorFree();
|
|
}
|
|
|
|
function checkErrorFree() {
|
|
var roadmRule = $("#spanEven").find('p').length;
|
|
var linkRule = $("#spanMisLink").find('p').length;
|
|
var transForce = $("#spanTransForce").find('p').length;
|
|
|
|
if (roadmRule == 0)
|
|
$("#spanEven").empty();
|
|
|
|
if (linkRule == 0)
|
|
$("#spanMisLink").empty();
|
|
|
|
if (transForce == 0)
|
|
$("#spanTransForce").empty();
|
|
|
|
if (roadmRule == 0 && linkRule == 0 && transForce == 0) {
|
|
$("#toast").toast('hide');
|
|
network.moveTo({
|
|
position: prePosition,
|
|
scale: preScale,
|
|
});
|
|
}
|
|
}
|
|
|
|
function addNodeHighlight(nodeID) {
|
|
var nodeDetails = network.body.data.nodes.get(nodeID);
|
|
if (nodeDetails.node_type == roadmJSON.node_type)
|
|
image = roadmJSON.w_image;
|
|
else if (nodeDetails.node_type == fusedJSON.node_type)
|
|
image = fusedJSON.w_image;
|
|
else if (nodeDetails.node_type == transceiverJSON.node_type)
|
|
image = transceiverJSON.w_image;
|
|
else if (nodeDetails.amp_category == amplifierJSON.amp_category)
|
|
image = amplifierJSON.w_image;
|
|
else if (nodeDetails.amp_category == ramanampJSON.amp_category)
|
|
image = ramanampJSON.w_image;
|
|
|
|
data.nodes.off("*", change_history_back);
|
|
data.edges.off("*", change_history_back);
|
|
|
|
network.body.data.nodes.update([{ id: nodeID, size: roadmJSON.size, image: DIR + image }]);
|
|
|
|
data.nodes.on("*", change_history_back);
|
|
data.edges.on("*", change_history_back);
|
|
|
|
}
|
|
|
|
function nodeRuleOnImportJSON() {
|
|
//checkLink
|
|
var roadmList = network.body.data.nodes.get({
|
|
filter: function (item) {
|
|
return (item.node_type == roadmJSON.node_type || item.node_type == transceiverJSON.node_type);
|
|
}
|
|
});
|
|
|
|
var connectedEdges;
|
|
var fromCount = 0;
|
|
var toCount = 0;
|
|
var edgeDetails;
|
|
var tempEdge = [];
|
|
$.each(roadmList, function (index, item) {
|
|
connectedEdges = network.getConnectedEdges(item.id);
|
|
tempEdge = [];
|
|
$.each(connectedEdges, function (index, item1) {
|
|
if (network.body.data.edges.get(item1).component_type != serviceJSON.component_type)
|
|
tempEdge.push(item1);
|
|
});
|
|
fromCount = 0;
|
|
toCount = 0;
|
|
for (i = 0; i < tempEdge.length; i++) {
|
|
edgeDetails = network.body.data.edges.get(tempEdge[i]);
|
|
if (edgeDetails.from == item.id)
|
|
fromCount++;
|
|
else if (edgeDetails.to == item.id)
|
|
toCount++;
|
|
}
|
|
|
|
if (fromCount != toCount || (fromCount == 0 && toCount == 0)) {
|
|
addNodeHighlight(item.id);
|
|
}
|
|
else {
|
|
if (item.node_type == transceiverJSON.node_type && item.transceiver_type == "") {
|
|
addNodeHighlight(item.id);
|
|
}
|
|
else if (item.node_type == roadmJSON.node_type && item.roadm_type == "") {
|
|
addNodeHighlight(item.id);
|
|
}
|
|
}
|
|
|
|
});
|
|
|
|
//checkMisLink
|
|
|
|
roadmList = network.body.data.nodes.get({
|
|
filter: function (item) {
|
|
return (item.node_type == amplifierJSON.node_type || item.node_type == fusedJSON.node_type);
|
|
}
|
|
});
|
|
|
|
$.each(roadmList, function (index, item) {
|
|
connectedEdges = network.getConnectedEdges(item.id);
|
|
|
|
fromCount = 0;
|
|
toCount = 0;
|
|
for (i = 0; i < connectedEdges.length; i++) {
|
|
edgeDetails = network.body.data.edges.get(connectedEdges[i]);
|
|
if (edgeDetails.from == item.id)
|
|
fromCount++;
|
|
else if (edgeDetails.to == item.id)
|
|
toCount++;
|
|
}
|
|
|
|
if (fromCount != toCount || (fromCount == 0 && toCount == 0) || fromCount > 1 || toCount > 1) {
|
|
addNodeHighlight(item.id);
|
|
}
|
|
else {
|
|
if (item.node_type == amplifierJSON.node_type) {
|
|
if (item.amp_category == ramanampJSON.amp_category && item.amp_type == "" && !(item.category)) {
|
|
addNodeHighlight(item.id);
|
|
}
|
|
else if (item.amp_category == amplifierJSON.amp_category && item.amp_type == "") {
|
|
addNodeHighlight(item.id);
|
|
}
|
|
}
|
|
|
|
}
|
|
//if (connectedEdges.length <= 1) {
|
|
// addNodeHighlight(item.id);
|
|
//}
|
|
|
|
});
|
|
}
|
|
|
|
function edgeStyleOnImportJSON() {
|
|
data.nodes.off("*", change_history_back);
|
|
data.edges.off("*", change_history_back);
|
|
var edgeList = network.body.data.edges.get();
|
|
var cfrom;
|
|
var cto;
|
|
var fiberData = [];
|
|
for (var i = 0; i < edgeList.length; i++) {
|
|
|
|
cfrom = edgeList[i].from;
|
|
cto = edgeList[i].to;
|
|
|
|
var connectedFiber = network.getConnectedEdges(cfrom);
|
|
connectedFiber.push(network.getConnectedEdges(cto));
|
|
var fromFiberCount = 0;
|
|
var toFiberCount = 0;
|
|
var fiberCount = 0;
|
|
|
|
$.each(connectedFiber, function (index, item) {
|
|
var fiberDetails = network.body.data.edges.get(item);
|
|
if (fiberDetails.fiber_category == dualFiberJSON.fiber_category || fiberDetails.fiber_category == singleFiberJSON.fiber_category || fiberDetails.component_type == serviceJSON.component_type || fiberDetails.component_type == dualPatchJSON.component_type) {
|
|
var fiberSmooth = singleFiberJSON.options.smooth;
|
|
if (fiberDetails.from == cfrom && fiberDetails.to == cto) {
|
|
fiberCount++;
|
|
|
|
if (fiberCount == 1) {
|
|
fiberSmooth = fiberJSON.options.smooth;
|
|
}
|
|
else {
|
|
fromFiberCount++;
|
|
fiberSmooth.roundness = "0." + fromFiberCount;
|
|
}
|
|
network.body.data.edges.update({
|
|
id: fiberDetails.id, smooth: fiberSmooth
|
|
|
|
});
|
|
//fiberData.push({ id: fiberDetails.id, smooth: fiberSmooth });
|
|
}
|
|
if (fiberDetails.from == cto && fiberDetails.to == cfrom) {
|
|
fiberCount++;
|
|
fiberSmooth.roundness = "0." + toFiberCount;
|
|
if (fiberCount == 1) {
|
|
fiberSmooth = fiberJSON.options.smooth;
|
|
}
|
|
else {
|
|
toFiberCount++;
|
|
fiberSmooth.roundness = "0." + toFiberCount;
|
|
}
|
|
network.body.data.edges.update({
|
|
id: fiberDetails.id, smooth: fiberSmooth
|
|
|
|
});
|
|
//fiberData.push({ id: fiberDetails.id, smooth: fiberSmooth });
|
|
}
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
//var uniqueEdges = Array.from(new Set(fiberData.map(a => a.id)))
|
|
// .map(id => {
|
|
// return fiberData.find(a => a.id === id)
|
|
// })
|
|
|
|
|
|
//uniqueEdges = uniqueEdges.filter(v => v.smooth.roundness != 0.5);
|
|
//console.log(uniqueEdges);
|
|
//data.nodes.off("*", change_history_back);
|
|
//data.edges.off("*", change_history_back);
|
|
//$.each(uniqueEdges, function (index, item) {
|
|
// network.body.data.edges.update({
|
|
// id: item.id, smooth: item.smooth
|
|
|
|
// });
|
|
//});
|
|
|
|
//data.nodes.on("*", change_history_back);
|
|
//data.edges.on("*", change_history_back);
|
|
|
|
}
|
|
|
|
function realUpdate() {
|
|
if ($("#div_toaster").is(":visible") && !$("#img_src").is(":visible")) {
|
|
$("#btnValidation").click();
|
|
}
|
|
}
|
|
|
|
function changeWorkAreaWH(eleID) {
|
|
width = $("#txtw").val();
|
|
height = $("#txth").val();
|
|
if (eleID == "txtw")
|
|
$("canvas").prop('width', width);
|
|
else if (eleID == "txth")
|
|
$("canvas").prop('height', height);
|
|
|
|
network.addNodeMode();
|
|
}
|
|
|
|
function remove_NodeHighlight() {
|
|
var hNodes = network.body.data.nodes.get({
|
|
filter: function (item) {
|
|
return (item.is_highlight == true);
|
|
}
|
|
});
|
|
|
|
for (var i = 0; i < hNodes.length; i++) {
|
|
var nodeDetails = hNodes[i];
|
|
data.nodes.off("*", change_history_back);
|
|
data.edges.off("*", change_history_back);
|
|
|
|
if (nodeDetails.node_type == roadmJSON.node_type) {
|
|
if (nodeDetails.image != DIR + roadmJSON.image) {
|
|
if (nodeDetails.h_image == DIR + roadmJSON.h_image) {
|
|
network.body.data.nodes.update({
|
|
id: nodeDetails.id, image: nodeDetails.image, h_image: nodeDetails.h_image, is_highlight: false
|
|
});
|
|
}
|
|
else {
|
|
network.body.data.nodes.update({
|
|
id: nodeDetails.id, image: nodeDetails.h_image, is_highlight: false
|
|
});
|
|
}
|
|
}
|
|
else {
|
|
network.body.data.nodes.update({
|
|
id: nodeDetails.id, is_highlight: false
|
|
});
|
|
}
|
|
}
|
|
else if (nodeDetails.node_type == fusedJSON.node_type) {
|
|
if (nodeDetails.image != DIR + fusedJSON.image) {
|
|
if (nodeDetails.h_image == DIR + fusedJSON.h_image) {
|
|
network.body.data.nodes.update({
|
|
id: nodeDetails.id, image: nodeDetails.image, h_image: nodeDetails.h_image, is_highlight: false
|
|
});
|
|
}
|
|
else {
|
|
network.body.data.nodes.update({
|
|
id: nodeDetails.id, image: nodeDetails.h_image, is_highlight: false
|
|
});
|
|
}
|
|
}
|
|
else {
|
|
network.body.data.nodes.update({
|
|
id: nodeDetails.id, is_highlight: false
|
|
});
|
|
}
|
|
}
|
|
else if (nodeDetails.node_type == transceiverJSON.node_type) {
|
|
if (nodeDetails.image != DIR + transceiverJSON.image) {
|
|
if (nodeDetails.h_image == DIR + transceiverJSON.h_image) {
|
|
network.body.data.nodes.update({
|
|
id: nodeDetails.id, image: nodeDetails.image, h_image: nodeDetails.h_image, is_highlight: false
|
|
});
|
|
}
|
|
else {
|
|
network.body.data.nodes.update({
|
|
id: nodeDetails.id, image: nodeDetails.h_image, is_highlight: false
|
|
});
|
|
}
|
|
}
|
|
else {
|
|
network.body.data.nodes.update({
|
|
id: nodeDetails.id, is_highlight: false
|
|
});
|
|
}
|
|
}
|
|
else if (nodeDetails.node_type == amplifierJSON.node_type) {
|
|
if (nodeDetails.amp_category == amplifierJSON.amp_category) {
|
|
if (nodeDetails.image != DIR + amplifierJSON.image) {
|
|
if (nodeDetails.h_image == DIR + amplifierJSON.h_image) {
|
|
network.body.data.nodes.update({
|
|
id: nodeDetails.id, image: nodeDetails.image, h_image: nodeDetails.h_image, is_highlight: false
|
|
});
|
|
}
|
|
else {
|
|
network.body.data.nodes.update({
|
|
id: nodeDetails.id, image: nodeDetails.h_image, is_highlight: false
|
|
});
|
|
}
|
|
}
|
|
else {
|
|
network.body.data.nodes.update({
|
|
id: nodeDetails.id, is_highlight: false
|
|
});
|
|
}
|
|
}
|
|
else if (nodeDetails.amp_category == ramanampJSON.amp_category) {
|
|
if (nodeDetails.image != DIR + ramanampJSON.image) {
|
|
if (nodeDetails.h_image == DIR + ramanampJSON.h_image) {
|
|
network.body.data.nodes.update({
|
|
id: nodeDetails.id, image: nodeDetails.image, h_image: nodeDetails.h_image, is_highlight: false
|
|
});
|
|
}
|
|
else {
|
|
network.body.data.nodes.update({
|
|
id: nodeDetails.id, image: nodeDetails.h_image, is_highlight: false
|
|
});
|
|
}
|
|
}
|
|
else {
|
|
network.body.data.nodes.update({
|
|
id: nodeDetails.id, is_highlight: false
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
} |