Skip to content

Commit d807bfe

Browse files
committed
Client updated to Bimserver 1.2beta JSON API
1 parent 292dfdf commit d807bfe

File tree

1 file changed

+97
-42
lines changed

1 file changed

+97
-42
lines changed

Client/index_served.html

Lines changed: 97 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<html>
22
<head>
3+
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
34
<title>BIM Web Client</title>
45
<style type="text/css">
56
body {
@@ -14,6 +15,7 @@
1415
background-color: white;
1516
border: 1px solid black;
1617
padding: 5px;
18+
margin-right:5px;
1719
}
1820
p, div {
1921
margin: 10px;
@@ -40,54 +42,64 @@
4042
<script src="Base64.js"></script>
4143
<script>
4244
var viewer;
43-
var host = 'http://localhost';
45+
var token = null;
46+
$.ajaxSetup({
47+
url: 'http://localhost:8082/jsonapi',
48+
type: 'POST',
49+
contentType: 'text/plain' // suppress preflight
50+
});
4451
function revisionUpdate(poid) {
45-
$('#roids').empty();
46-
$.ajax({url: host+'/rest/getAllRevisionsOfProject', data: 'poid='+poid, dataType: 'json',
47-
xhrFields: { withCredentials: true}, success: function(data){
48-
var select = $('#roids');
49-
$(data.sRevision).sort(function(r1,r2){
50-
return r1.id > r2.id;
51-
}).each(function(i, revision){
52-
$('<option />').val(revision.oid).text(revision.id).appendTo(select);
53-
});
54-
}});
52+
$('#roids option.added').remove();
53+
if(poid!='null') $.ajax({
54+
data: JSON.stringify({token:token,request:{interface:'ServiceInterface',method:'getAllRevisionsOfProject',parameters:{poid:poid}}}),
55+
success: function(response,status,request){
56+
var select = $('#roids');
57+
if('exception' in response.response) $('#errors').text('Error: '+response.response.exception.message);
58+
else {
59+
$(response.response.result).sort(function(r1,r2){
60+
return r1.id > r2.id;
61+
}).each(function(i, revision){
62+
$('<option class="added" />').val(revision.oid).text(revision.id).appendTo(select);
63+
});
64+
}
65+
}
66+
});
5567
}
5668
function projectUpdate() {
57-
$('#revision').show();
58-
$('#poids').empty();
59-
$.ajax({url: host+'/rest/getAllReadableProjects', dataType: 'json',
60-
xhrFields: { withCredentials: true}, success: function(data) {
61-
var select = $('#poids');
62-
$(data.sProject).filter(function(i,project){
69+
$('#poids option.added').remove();
70+
$.ajax({
71+
data: JSON.stringify({token:token,request:{interface:'ServiceInterface',method:'getAllProjects',parameters:{onlyTopLevel:false}}}),
72+
success: function(response,status,request) {
73+
var select = $('#poids');
74+
if('exception' in response.response) $('#errors').text('Error: '+response.response.exception.message);
75+
else {
76+
$(response.response.result).filter(function(i,project){
6377
return project.state == "ACTIVE" && project.name != "INT-Store";
6478
}).sort(function(p1,p2){
6579
return p1.name > p2.name;
6680
}).each(function(i, project) {
67-
$('<option />').val(project.oid).text(project.name).appendTo(select);
81+
$('<option class="added" />').val(project.oid).text(project.name).appendTo(select);
6882
});
6983
revisionUpdate(select.val());
7084
}
71-
});
85+
}
86+
});
7287
}
7388
$(document).ready(function() {
7489
$('#errors').ajaxError(function(event, xhr, settings, thrown) {
7590
$(this).text( 'Ajax error: ' + thrown.message);
7691
});
7792
viewer = new ThreeJsViewer();
7893
viewer.init($('#viewerContainer'));
79-
projectUpdate();
8094
viewer.onClick = function(id) {
8195
if (id==null) {
8296
$('#selection').html('nothing');
8397
return;
8498
}
8599
$.ajax({
86-
url: host+'/rest/getDataObjectByGuid', dataType: 'json',
87-
data: 'roid='+$('#roids').val()+'&guid='+id,
88-
xhrFields: { withCredentials: true},
89-
success: function(data){
90-
$('#selection').html(id + ' - ' + data.sDataObject.name + ' - ' + data.sDataObject.type);
100+
data: JSON.stringify({token:token,request:{interface:'ServiceInterface',method:'getDataObjectByGuid',parameters:{roid:$('#roids').val(),guid:id}}}),
101+
success: function(res,s,req){
102+
$('#selection').html(id + ' - ' + res.response.result.name + ' - ' + res.response.result.type);
91103
}
92104
});
93105
};
@@ -96,22 +108,56 @@
96108
revisionUpdate($(this).val());
97109
});
98110
$('#revision').submit(function(){
99-
$.ajax({
100-
url: host+'/rest/download',
101-
data: 'roid='+$(this.roids).val()+'&serializerName=ThreeJs&sync=true&showOwn=true',
102-
xhrFields: { withCredentials: true},
103-
success: function(data) {
104-
viewer.clearModel();
105-
$.ajax({
106-
url: host+'/rest/getDownloadData',
107-
dataType: 'json',
108-
data: 'actionId=' + data,
109-
xhrFields: { withCredentials: true},
110-
success: function(model) {
111-
viewer.loadSerializedModel(Base64.decode(model.sCheckoutResult.file));
111+
var roid = $(this.roids).val();
112+
if(roid!='null') $.ajax({
113+
data: JSON.stringify({token:token,request:{interface:'ServiceInterface',method:'getSerializerByName',parameters:{serializerName:'ThreeJs'}}}),
114+
success: function(res1,s1,req1){
115+
if('result' in res1.response) $.ajax({
116+
data: JSON.stringify({token:token,request:{interface:'ServiceInterface',method:'download',parameters:{serializerOid:res1.response.result.oid,sync:true, showOwn:true,roid:roid}}}),
117+
success: function(res2,s2,req2){
118+
if('result' in res2.response) $.ajax({
119+
data: JSON.stringify({token:token,request:{interface:'ServiceInterface',method:'getDownloadData',parameters:{actionId:res2.response.result}}}),
120+
success: function(res3,s3,req3){
121+
viewer.loadSerializedModel(Base64.decode(res3.response.result.file));
122+
}
123+
});
112124
}
113125
});
114-
// viewer.loadModel('/rest/downloadBinary?actionId=' + data);
126+
}
127+
});
128+
return false;
129+
});
130+
$('#authentication').submit(function(){
131+
var username = $(this.username).val();
132+
var password = $(this.password).val();
133+
$.ajax({
134+
data: JSON.stringify({request:{interface:'ServiceInterface',method:'login',parameters:{username:username,password:password}}}),
135+
success: function(response,status,request){
136+
if('exception' in response.response) $('#errors').text('Error: '+response.response.exception.message);
137+
else {
138+
token = response.response.result;
139+
$('#authenticatedUsername').val(username);
140+
$('#authentication').hide();
141+
$('#authenticated').show();
142+
projectUpdate();
143+
}
144+
}
145+
});
146+
return false;
147+
});
148+
$('#authenticated').submit(function(){
149+
$.ajax({
150+
data: JSON.stringify({token:token,request:{interface:'ServiceInterface',method:'logout'}}),
151+
success: function(response,status,request){
152+
if('exception' in response.response) $('#errors').text('Error: '+response.response.exception.message);
153+
else{
154+
token = null;
155+
$('#authenticatedUsername').val('');
156+
$('#poids option.added').remove();
157+
$('#roids option.added').remove();
158+
$('#authenticated').hide();
159+
$('#authentication').show();
160+
}
115161
}
116162
});
117163
return false;
@@ -121,9 +167,18 @@
121167
</head>
122168
<body>
123169
<div>
124-
<form id="revision" class="boxed" style="display: none;">
125-
<select id="poids"></select>
126-
<select id="roids"></select>
170+
<form id="authentication" class="boxed" action="javascript:" method="post">
171+
User: <input type="text" id="username"/>
172+
Password: <input type="password" id="password"/>
173+
<input type="submit" value="Login"/>
174+
</form>
175+
<form id="authenticated" class="boxed" style="display: none" action="javascript:" method="post">
176+
User: <input type="text" id="authenticatedUsername" disabled />
177+
<input type="submit" value="Logout" />
178+
</form>
179+
<form id="revision" class="boxed" action="javascript:" method="post">
180+
<select id="poids"><option value="null">-- none --</option></select>
181+
<select id="roids"><option value="null">-- none --</option></select>
127182
<input type="submit" value="Show" />
128183
</form>
129184
</div>

0 commit comments

Comments
 (0)