Commit aa54d9ec authored by akucera's avatar akucera
Browse files

added support for trend/program/influence insert

parent ec101e06
......@@ -49,12 +49,24 @@
<script>
var p = new SBMSPage({
datapoints : [],
semaphore : 0,
addresses : [],
fieldsType : "field.insert.dataPoint",
endpoint : "datapoints",
addressType : "dataPoint",
debug : true,
init: function() {
if (window.location.hash != null
&& window.location.hash != ""
&& window.location.hash != "#") {
var panel = window.location.hash.substring(1);
p.loadPanelFromFile("#nav" + panel);
} else {
p.loadPanelFromFile("li.opNav.active");
}
/*
$(".opDiv").hide();
// loading divs
$(".opDiv").each(function() {
......@@ -62,19 +74,22 @@
$(this).load($(this).attr("data-incl-file"), function() { if(--p.semaphore == 0) { p.delayedInit(); } });
});
$("#" + $("li.opNav.active").attr("data-show-div")).show();
*/
$(".opNav").click(
function() {
p.switchPanel("opNav", "opDiv", this, $(this).attr(
"data-show-div"));
});
$(".opNav").click(function() { p.loadPanelFromFile($(this)); } );
//$("#kompasFrame").attr("src", p.mapURL);
},
delayedInit : function() {
loadPanelFromFile : function(srcSelector) {
var src = $(srcSelector);
p.switchTab("opNav", src);
$("#content").load(src.attr("data-incl-file"), function() {
p[src.attr("data-init-func")]();
});
},
initInsertSingle : function() {
$("#selectorTree").hide();
$(".selectorNav").click(
function() {
......@@ -93,54 +108,74 @@
$("#c2").height() - $("#c1").height()
+ ($("#console").outerHeight()));
}
});
});
if (window.location.hash != null
&& window.location.hash != ""
&& window.location.hash != "#") {
var panel = window.location.hash.substring(1);
p.switchPanel("opNav", "opDiv", $("#nav" + panel),
"tab" + panel);
}
p.loadList("field.insert", [ p.createParams ], [
"#params",
false,
function() {
p.switchPanel("selectorNav", "selectorDiv",
"showTree", "selectorTree");
},
function() {
},
function() {
p.switchPanel("selectorNav", "selectorDiv",
"showMap", "selectorMap");
}, function() {
}, "kompasFrame", "tree" ]);
$("#sendSingle").click(p.sendInsertSingle);
p.loadList("field.insert.dataPoint",
[ p.createParams ],
[
"#params",
false,
function() {
p.switchPanel("selectorNav", "selectorDiv",
"showTree", "selectorTree");
},
function() {},
function() {
p.switchPanel("selectorNav", "selectorDiv",
"showMap", "selectorMap");
},
function() {},
"kompasFrame", "tree"
]);
$("#sendSingle").click(p.sendInsertSingle);
},
initInsertBatch : function() {
p.initBatchCommon();
},
initInsertTrends : function() {
p.fieldsType = "field.insert.trend";
p.endpoint = "trends";
p.addressType = "trend";
p.initBatchCommon();
},
initInsertPrograms : function() {
p.fieldsType = "field.insert.usage";
p.endpoint = "relations";
p.addressType = "algorithm";
p.initBatchCommon();
},
initInsertInfluence : function() {
p.fieldsType = "field.insert.influence";
p.endpoint = "relations";
p.addressType = "address";
p.initBatchCommon();
},
initRemoveBatch : function() {
$("#sendRemove").click(p.sendRemoveBatch);
},
initBatchCommon : function() {
$("#parseBatch").click(
function() {
$("#rawInput").attr("rows", 6);
p.parseRawInput($("#rawInput").val(), $(
"#headers").prop("checked"), $(
"#delimiter").val());
});
$("#sendRemove").click(p.sendRemoveBatch());
});
p.loadBatchHeaders();
$("#sendBatch").click(p.sendInsertBatch);
},
loadBatchHeaders : function() {
p.loadList("field.insert", function(data, params) {
p.loadList(p.fieldsType, function(data, params) {
var htmlHead = "";
var columns = 0;
$.each(data, function(i, f) {
htmlHead += "<th>" + f + "</th>";
htmlHead += "<th>" + $.t(f) + "</th>";
++columns;
});
$("table#parsedBatch thead tr:eq(0)").html(htmlHead);
......@@ -149,85 +184,11 @@
"colspan", columns);
});
},
sendRemoveBatch : function() {
if($("#user").val().trim() == "" || $("#pass").val().trim() == "") {
$("#status").html($.t("Enter valid credentials."));
p.toggleButtonError("removeOverallStatus","Forbidden");
return;
}
var glyphDP = "minus";
var glyphRels = "minus";
var glyphTrends = "minus";
$("#removeStatus").html("");
var ids = $("#idsToRemove").val().split(/[\n;\s]+/);
var assertions = [];
if($("#removeDps").prop("checked")) {
assertions[assertions.length] = "datapoints";
glyphDP = "time";
}
if($("#removeRels").prop("checked")) {
assertions[assertions.length] = "relations";
glyphRels = "time";
}
if($("#removeTrends").prop("checked")) {
assertions[assertions.length] = "trends";
glyphTrends = "time";
}
for(var i = 0; i < ids.length; i++) {
var text = ids[i];
ids[i] = encodeURIComponent(ids[i]);
$("#removeStatus").append('<tr data-address-id="' + ids[i] + '">'
+ '<td>' + text + '</td>'
+ '<td data-link-type="datapoints"><span class="glyphicon glyphicon-' + glyphDP + '" aria-hidden="true"></span></td>'
+ '<td data-link-type="relations"><span class="glyphicon glyphicon-' + glyphRels + '" aria-hidden="true"></span></td>'
+ '<td data-link-type="trends"><span class="glyphicon glyphicon-' + glyphTrends+ '" aria-hidden="true"></span></td>');
};
if(assertions.length > 0 && ids.length > 0) {
p.removeAssertions(assertions, 0, ids, 0);
p.toggleButtonSending("removeOverallStatus");
}
$("#sendBatch").click(p.sendInsertBatch);
},
removeAssertions : function(assertions, iA, ids, iI) {
if(iA < assertions.length && iI < ids.length) {
$.ajax({
type: 'DELETE',
url: SBMSPage.prototype.sbmsURL + assertions[iA] + "/" + ids[iI],
beforeSend: function (xhr) {
p.setAuth(xhr);
}}).done(function() {
$('tr[data-address-id="' + ids[iI] + '"] td[data-link-type="' + assertions[iA]+ '"]')
.html('<span class="glyphicon glyphicon-ok" aria-hidden="true"></span>');
p.removeAssertions(assertions, iA, ids, ++iI);
}).fail(function() {
$('tr[data-address-id="' + ids[iI] + '"] td[data-link-type="' + assertions[iA]+ '"]')
.html('<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>');
p.removeAssertions(assertions, iA, ids, ++iI);
});
} else if (iA < assertions.length) {
p.removeAssertions(assertions, ++iA, ids, 0);
} else {
$("#removeOverallStatus").html($.t("Finishing..."));
// query to reopen the model
$.ajax({type: "get", url: SBMSPage.prototype.sbmsURL + "datapoints/" + ids[0] }).done(function() {
p.toggleButtonSuccess("removeOverallStatus");
p.toggleButtonComplete("removeOverallStatus", "success");
});
}
},
parseRawInput : function(input, headersPresent, delimiter) {
var data;
......@@ -237,7 +198,7 @@
var headers = [];
var h = input[0].split(delimiter);
data = input.split("\n").slice(1);
p.loadList("field.insert",
p.loadList(p.fieldsType,
function(oFields, params) {
// filling the headers
......@@ -255,7 +216,7 @@
});
} else {
data = input.split("\n");
p.loadList("field.insert", function(h, params) {
p.loadList(p.fieldsType, function(h, params) {
p.parseRows(data, h, delimiter);
p.fillBatchTable(h);
});
......@@ -263,31 +224,32 @@
},
parseRows : function(data, headers, delimiter) {
p.addresses = [];
$.each(data, function(i, row) {
if (row == "")
return;
var vals = row.split(delimiter);
var dp = {};
var obj = {};
$.each(vals, function(j, val) {
p.setDpField(dp, headers[j], val);
p.setDpField(obj, headers[j], val);
});
p.datapoints[datapoints.length] = dp;
p.addresses[p.addresses.length] = obj;
});
},
fillBatchTable : function(headers) {
//loadList("insertField", function(data, params) {
html = "";
$.each(datapoints, function(i1, dp) {
$.each(p.addresses, function(i1, obj) {
html += "<tr>";
$.each(headers, function(i2, f) {
var v = eval("dp." + f);
var v = eval("obj." + f);
var c = "";
if (v == null) {
c = ' class="bg-danger"';
v = "";
}
html += "<td" + c + ">" + v + "</td>";
html += "<td" + c + ">" + $.t(v) + " (" + v + ")</td>";
});
html += "</tr>";
});
......@@ -298,9 +260,9 @@
sendInsertBatch : function() {
p.toggleButtonSending("batchOverallStatus");
if (datapoints.length > 0) {
if (p.addresses.length > 0) {
index = 0;
p.proceedSend(datapoints, index, function() {
p.proceedSend(p.addresses, index, function() {
p.toggleButtonSuccess("batchOverallStatus");
p.toggleButtonComplete("batchOverallStatus", "success");
});
......@@ -309,7 +271,7 @@
},
proceedSend : function(data, index, completeAction) {
if (index < data.length) {
p.insertDP(data[index], function(id) {
p.insertAddress(data[index], function(id) {
}, function(id) {
}, function(id, error) {
}, function(id, status) {
......@@ -333,28 +295,36 @@
});
if (dp != null) {
p.insertDP(dp, p.toggleButtonSending, p.toggleButtonSuccess,
p.insertAddress(dp, "dataPoint", "datapoints", p.toggleButtonSending, p.toggleButtonSuccess,
p.toggleButtonError, p.toggleButtonComplete,
"logSingle", "status");
}
},
insertDP : function(dp, ba, sa, ea, ca, logId, overallStatusId) {
var query = p.sbmsURL + "datapoints/";
insertAddress : function(address, ba, sa, ea, ca, logId, overallStatusId) {
var query = p.sbmsURL + p.endpoint;
var d = {};
d[p.addressType] = address;
if(p.debug) {
ba(overallStatusId);
$("#" + logId).append("\nDEBUG Mode - data are not sent. Data:\n" +
JSON.stringify(d, null, 2));
sa(overallStatusId);
ca(overallStatusId, "success");
return;
}
$.ajax({
type : 'POST',
cache : false,
url : query,
data : JSON.stringify({
dataPoint : dp
}),
data : JSON.stringify(d),
processData : false,
contentType : 'application/json',
beforeSend : function(xhr) {
p.setAuth(xhr);
ba(overallStatusId);
$("#" + logId).append(
"\nSending dp: " + JSON.stringify(dp, null, 2));
"\nSending data: " + JSON.stringify(d, null, 2));
},
success : function(result) {
sa(overallStatusId);
......@@ -371,6 +341,84 @@
"\nComplete - " + status + "\n-----------");
}
});
},
sendRemoveBatch : function() {
if($("#user").val().trim() == "" || $("#pass").val().trim() == "") {
$("#status").html($.t("Enter valid credentials."));
p.toggleButtonError("removeOverallStatus","Forbidden");
return;
}
var glyphDP = "minus";
var glyphRels = "minus";
var glyphTrends = "minus";
$("#removeStatus").html("");
var ids = $("#idsToRemove").val().split(/[\n;\s]+/);
var assertions = [];
if($("#removeDps").prop("checked")) {
assertions[assertions.length] = "datapoints";
glyphDP = "time";
}
if($("#removeRels").prop("checked")) {
assertions[assertions.length] = "relations";
glyphRels = "time";
}
if($("#removeTrends").prop("checked")) {
assertions[assertions.length] = "trends";
glyphTrends = "time";
}
for(var i = 0; i < ids.length; i++) {
var text = ids[i];
ids[i] = encodeURIComponent(ids[i]);
$("#removeStatus").append('<tr data-address-id="' + ids[i] + '">'
+ '<td>' + text + '</td>'
+ '<td data-link-type="datapoints"><span class="glyphicon glyphicon-' + glyphDP + '" aria-hidden="true"></span></td>'
+ '<td data-link-type="relations"><span class="glyphicon glyphicon-' + glyphRels + '" aria-hidden="true"></span></td>'
+ '<td data-link-type="trends"><span class="glyphicon glyphicon-' + glyphTrends+ '" aria-hidden="true"></span></td>');
};
if(assertions.length > 0 && ids.length > 0) {
p.removeAssertions(assertions, 0, ids, 0);
p.toggleButtonSending("removeOverallStatus");
}
},
removeAssertions : function(assertions, iA, ids, iI) {
if(iA < assertions.length && iI < ids.length) {
$.ajax({
type: 'DELETE',
url: SBMSPage.prototype.sbmsURL + assertions[iA] + "/" + ids[iI],
beforeSend: function (xhr) {
p.setAuth(xhr);
}}).done(function() {
$('tr[data-address-id="' + ids[iI] + '"] td[data-link-type="' + assertions[iA]+ '"]')
.html('<span class="glyphicon glyphicon-ok" aria-hidden="true"></span>');
p.removeAssertions(assertions, iA, ids, ++iI);
}).fail(function() {
$('tr[data-address-id="' + ids[iI] + '"] td[data-link-type="' + assertions[iA]+ '"]')
.html('<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>');
p.removeAssertions(assertions, iA, ids, ++iI);
});
} else if (iA < assertions.length) {
p.removeAssertions(assertions, ++iA, ids, 0);
} else {
$("#removeOverallStatus").html($.t("Finishing..."));
// query to reopen the model
$.ajax({type: "get", url: SBMSPage.prototype.sbmsURL + "datapoints/" + ids[0] }).done(function() {
p.toggleButtonSuccess("removeOverallStatus");
p.toggleButtonComplete("removeOverallStatus", "success");
});
}
}
});
</script>
......@@ -381,7 +429,7 @@
background-image: none;
}
.opDiv {
#content {
margin-top: 10px;
}
</style>
......@@ -389,50 +437,35 @@
<body>
<nav id="menu"></nav>
<form id="queryForm">
<div class="container-fluid">
<ul class="nav nav-tabs">
<li role="presentation" class="active opNav"
data-show-div="tabInsertSingle" id="navInsertSingle"><a
href="#InsertSingle">Datapoint (Single)</a></li>
<li role="presentation" class="opNav" data-show-div="tabInsertBatch"
id="navInsertBatch"><a href="#InsertBatch">Datapoints (Batch)</a></li>
<li role="presentation" class="opNav"
data-show-div="tabInsertTrends" id="navInsertTrends"><a
href="#InsertTrends">Trends</a></li>
<li role="presentation" class="opNav"
data-show-div="tabInsertPrograms" id="navInsertPrograms"><a
href="#InsertPrograms">Programs</a></li>
<li role="presentation" class="opNav"
data-show-div="tabInsertInfluence" id="navInsertInfluence"><a
<li role="presentation" class="active opNav" id="navInsertSingle"
data-init-func="initInsertSingle"
data-incl-file="inclInsertSingle.html"><a href="#InsertSingle">Datapoint
(Single)</a></li>
<li role="presentation" class="opNav" id="navInsertBatch"
data-init-func="initInsertBatch"
data-incl-file="inclInsertBatch.html"><a href="#InsertBatch">Datapoints
(Batch)</a></li>
<li role="presentation" class="opNav" id="navInsertTrends"
data-init-func="initInsertTrends"
data-incl-file="inclInsertBatch.html"><a href="#InsertTrends">Trends</a></li>
<li role="presentation" class="opNav" id="navInsertPrograms"
data-init-func="initInsertPrograms"
data-incl-file="inclInsertBatch.html"><a href="#InsertBatch">Programs</a></li>
<li role="presentation" class="opNav" id="navInsertInfluence"
data-init-func="initInsertInfluence"
data-incl-file="inclInsertBatch.html"><a
href="#InsertInfluence">Influence</a></li>
<li role="presentation" class="opNav" data-show-div="tabRemoveBatch"
id="navRemoveBatch"><a href="#RemoveBatch">Remove</a></li>
<li role="presentation" class="opNav" id="navRemoveBatch"
data-init-func="initRemoveBatch"
data-incl-file="inclRemoveBatch.html"><a href="#RemoveBatch">Remove</a></li>
</ul>
<div id="tabInsertSingle" class="opDiv"
data-incl-file="inclInsertSingle.html"></div>
<div id="tabInsertBatch" class="opDiv"
data-incl-file="inclInsertBatch.html"></div>
<div id="tabInsertTrends" class="opDiv"
data-incl-file="inclInsertTrend.html">
</div>
<div id="tabInsertPrograms" class="opDiv"
data-incl-file="inclInsertProgram.html">
</div>
<div id="content"></div>
<div id="tabInsertInfluence" class="opDiv"
data-incl-file="inclInsertInfluence.html">
</div>
<div id="tabRemoveBatch" class="opDiv"
data-incl-file="inclRemoveBatch.html"></div>
</div>
</form>
......
<p>TODO Influence insert</p>
\ No newline at end of file
<p>TODO Programs insert</p>
\ No newline at end of file
......@@ -34,7 +34,7 @@
</ul>
<div id="selectorMap" class="selectorDiv">
<iframe id="kompasFrame" style="width:100%;height:100%;" src="about:blank"></iframe>
<iframe id="kompasFrame" style="width:100%;height:100%; border: 0px none transparent;" src="about:blank"></iframe>
</div>
<div id="selectorTree" class="selectorDiv">
<div id="tree"></div>
......
<p>TODO Trends insert</p>
\ No newline at end of file
......@@ -158,6 +158,8 @@
background-image: none;
}
</style>
</head>
......@@ -175,7 +177,7 @@
<li role="presentation"><a href="#" data-i18n="index.map">Show on the Map:</a></li>
</ul>
<div id="map">
<iframe id="kompasFrame" style="width:100%;height:100%;" src="about:blank"></iframe>
<iframe id="kompasFrame" style="width:100%;height:100%; border: 0px none transparent;" src="about:blank"></iframe>
</div>
</div>
......
......@@ -372,6 +372,11 @@ SBMSPage.prototype.switchPanel = function(navClass, divClass, activeNav, activeD
$("#" + activeDiv).show();
};
SBMSPage.prototype.switchTab = function(navClass, activeNav) {
$("." + navClass).removeClass("active");
activeNav.addClass("active");
};
SBMSPage.prototype.langPanelSetup = function(lang) {
$("#langIndicator").html($("a.langChange[data-lang='" + lang + "']").attr("data-lang-indicator-abbrev"));
......
......@@ -342,7 +342,7 @@ var p = new SBMSPage ({
</form>
<div id="mapSelect" title="Select BIM ID and copy it using clipboard">
<iframe id="kompasFrame" style="width:100%;height:100%;" src="about:blank"></iframe>