1 
  2 /**
  3  * @fileOverview  The file contains app load functionality. The load functions actualy used provides client side model building together with
  4  * ui building. The load module is independant from app pane-layout and all ui-layout functionality.
  5  *
  6  * @author 
  7  * @version 
  8  */
  9 
 10 function loadData(){
 11 	//loadWelcomeMessage();
 12 	loadTooltiptable();
 13 	loadWorkspaceProfiles();
 14 	//loadCollections(); // loaded after WorkspaceProfile is loaded
 15 	//loadTerms(); 		 // loaded after WorkspaceProfile is loaded
 16 	//loadTermsAutocomplete(); //handleQueryInput();
 17 	//createTooltip()
 18 	
 19 	//loadComponentsRegistry();	
 20 	//loadDCR();
 21 
 22 }
 23 
 24 function loadTooltiptable() {
 25 	 
 26 	 var uri = window.location.pathname + "static/info.xml";
 27 	 
 28 	 $.get(uri,function(data, textStatus){
 29 	 	$(data).find('#commands').find('dt').each(function(){
 30 	 		tooltiptable[$(this).attr("id")] = $(this).text();
 31 	 		//$(this).next('dd').text();
 32 	 	});
 33 	 },'html');
 34 
 35 };
 36 /*
 37 function loadAdminFile(){
 38 	json_admin = {'Admin':{'maxqid':'0','QueryIndices':'null'}};
 39 	
 40 	jQuery.getJSON("/MDService2/workspaceprofile/admin",function(data){
 41 			json_admin = preprocessJSON(data);
 42 	});
 43 }
 44 */
 45 function loadWorkspaceProfiles(){
 46 	//empty json
 47 	jsonw = {'WorkspaceProfile':{'CustomTermsets':'null','Termsets':'null','Repositories':'null','Querysets':'null','created':'null','lastchanged':'null','profilename':'null'}};
 48 	$('#qts_input').val("");
 49 	
 50 	// USER WORKSPACEPROFILE
 51 	jQuery.getJSON("/MDService2/workspaceprofile/user",function(data){
 52 		notifyUser(data['WorkspaceProfile'],'debug');
 53 				jsonw = preprocessJSON(data);
 54 				
 55 				jQuery.getJSON("/MDService2/workspaceprofile/server",function(data){
 56 					notifyUser(data['WorkspaceProfile'],'debug');
 57 							var json = preprocessJSON(data);
 58 							$("#serverqs").attr("data",JSON.stringify(json));
 59 							loadQuerysets(json["WorkspaceProfile"]["Querysets"],"server");
 60 							loadRepositories(json["WorkspaceProfile"]["Repositories"]);
 61 							loadCollections(true);				
 62 							loadTerms();
 63 							loadTermsAutocomplete();
 64 							createTooltip(null);
 65 							
 66 							
 67 					});
 68 
 69 				loadQuerysets(jsonw["WorkspaceProfile"]["Querysets"],"user");
 70 				//loadTermsets(jsonw["WorkspaceProfile"]["CustomTermsets"]);
 71 				createTooltip(this);
 72 	});
 73 	
 74 	
 75 
 76 }
 77 
 78 function loadCollections(ini){
 79 	var coll_uri = link('collections','htmllist?repository=' + getSelectedRepository());
 80 		
 81 	$("#collections").jstree({ 
 82 		"html_data" : {
 83 			"ajax" : {
 84 				"url" : coll_uri,
 85 				"data" : function (n) { 
 86 					return {  //id : n.attr ? n.attr("id") : 0 ,
 87 							  collection : n.attr ? n.attr("handle") : "",
 88 							  maxdepth : n.attr ? 2 : 1 };
 89 				}
 90 			}
 91 		},
 92 		types : {
 93 			// the default type
 94 			"default" : {
 95 				"max_children"	: -1,
 96 				"max_depth"		: -1,
 97 				"valid_children": "all"
 98 
 99 		}
100 		},
101 
102 		"plugins" : [ "themes", "html_data", "ui" , "checkbox", "types", "search" ]
103 	});
104 	
105 	$('#collections').bind('loaded.jstree reopen.jstree', function(event, data)
106 			{
107 				if ((event.type == "loaded") &&(ini)) {
108 					loadQueryFromUriParams();
109 				}
110 				
111 				var dataelems = data.inst.get_container();
112 				createTooltip($(dataelems));
113 					//data.inst.get_container().unblock();		
114 		});
115 
116 	$('#collections').bind("change_state.jstree", function (event, data) {
117 		var dataelems = data.inst.get_container();
118 		var coll;
119 		if (!local_collections){
120 			var collections  = [];
121 			//collections.splice(0, collections.length);
122 			
123 			$(this).find('.jstree-checked').each(function(index){
124 				if (!($(this).parent().parent().hasClass("jstree-checked")) ) {
125 					//notifyUser("selection...:" + index + ":" + String.trim($(this).children('a').text())  + $(this).attr("handle"),'debug');	
126 					coll = new Collection($(this).attr("handle"), String.trim($(this).children('a').text()));
127 					collections[collections.length] = coll;						
128 				}
129 			});
130 			
131 			collections_widget.load(collections);
132 		}
133     });
134 	
135 	$('#collections').bind("search.jstree", function (e, data) {  
136 		
137 		if (data.rslt.nodes.length > 0){
138 			$('#collections').jstree("checkbox.check_node",data.rslt.nodes[0]);
139 		}
140 		//alert("Found " + data.rslt.nodes.length + " nodes matching '" + data.rslt.str + "'.");  
141     });  
142 
143 };
144 
145 function updateCollectionTree(){
146 	/*
147 	local_collections = true;
148 	var cc = $('#collections').jstree("get_checked");
149 	$('#collections').jstree("uncheck_all");
150 	$.each(collections, function(){
151 		$('#collections').jstree("search",this.name);
152 	});
153 	local_collections = false;
154 	*/
155 };
156 
157 function loadTerms(){
158 	$('#model_profiles').load(link('terms','htmlselect',actions.terms.current) + '?repository=' + getSelectedRepository());
159 	
160 	$('#terms-select').live('change', function(event) {
161 		//notifyUser(this.value,'debug');
162 		update(link('terms', 'htmllist', this.value)+ '?maxdepth=' + actions.terms.maxdepth + '&repository=' + getSelectedRepository(), 
163 				'#terms-select', '#model_terms',
164 					function() {
165 						$("#model_terms .treeview").treeview({
166 							animated: "fast",
167 							collapsed: false
168 						});
169 						//notifyUser($("#model_terms .treeview"),'debug');
170 						notifyUser("loaded: #model_terms .treeview",'debug');
171 						createTooltip(this);
172 						}	
173 			);	
174 		}
175 	);
176 	
177 	$('#terms .cmd_filter').live('click',  function(event) {			
178 		var term = $(this).parent().children('span.data').text();		
179 		if ($('.searchtype_text','#search').size()> 0 ) {
180 			var t = $('#query_area').text();
181 			$('#query_area').val(t + " " + term);
182 		} else {
183 			searchclauseset.updatedata(term);
184 			
185 		}
186 	});
187 	
188 	$('#terms .cmd_columns').live('click',  function(event) {	
189 		var term = $(this).parent().children('span.data').text();
190 		columns_widget.add(new ListItem(term)); 
191 		
192 	});	
193 
194 }
195 
196 function loadRepositories(json) {
197 	
198 	var $select;
199 	$select = $('#repositories_select');
200 	
201 	
202 	$select.find("option").remove();
203 	
204 	if (String(json) != "null") {
205 		
206 		$.each(json, function(i,item) {
207 		    $select.append(new Option(this.name, this.id));
208 		});
209 		
210 	}
211 	// select first
212 	if (url_params["repository"] != undefined){
213 		var r = parseInt(url_params["repository"])-1;
214 		$($select.find("option")[r]).attr("selected","true");
215 	} else {
216 		$select.find("option").first().attr("selected","true");
217 	}
218 
219 	
220 	$select.change(function(data){
221 		loadCollections(false);				
222 		loadTerms();
223 		loadTermsAutocomplete();
224 		$('#model_profiles').load(link('terms','htmlselect',actions.terms.current) + '?repository=' + getSelectedRepository());
225 	});
226 	
227 }
228 
229 function loadTermsAutocomplete(){
230 	
231 	var elem;
232 	$('#terms_autocomplete').children().remove();
233 	$('#terms_autocomplete').css('display','none');
234 	$('#terms_autocomplete').load(link('terms_autocomplete','autocomplete/?q=all&repository='+ getSelectedRepository()),function(){
235 		$(this).find('term').each(function(index){
236 			elem = $(this).attr("name");
237 			element_autocomplete[index] = elem;
238 			elements_hashtable[elem] = $(this).html();
239 		});
240 		// add autocomplete 's
241 		searchclauseset.initAutocomplete();
242 		columns_widget.initAutocomplete(element_autocomplete);
243 	});
244 };
245 
246 function appendQueryUI(json,i, qs){
247 	var del = '';
248 	var name = '';
249 	//var ul;
250 	var id = $(qs).parent().attr('id');
251 	
252 	if (id == 'userqs') {
253 		del = '<span class="cmd cmd_del" ><xsl:text> </xsl:text></span>';
254 		name = '<div class="cmds-elem-prop"><span class="label">name:</span><input type="text" class="input-name" value="' + json.name + '"></div>';
255 	} else {
256 		name = '<div class="cmds-elem-prop"><span class="label">name:</span><span class="value">' + json.name +
257 		'</span></div>';
258 	}
259 		
260 	var timestr = "";
261 	if (json.time != undefined){
262 		timestr = json.time;
263 	}
264 	var squery = json.squerystring;
265 	if (squery = "[NULL]"){
266 		squery = "";
267 	}
268 	var qq = json.querystring;
269 	if (qq = "[NULL]"){
270 		qq = "";
271 	}
272 	var x = '<div class="cmds-elem-plus" ><span class="cmd cmd_load"></span><span class="detail-caller-inline" ><a href="'+id + '_'+ i+'" >' + 
273 	json.name + '</a></span>' + 
274 	del +
275 	'<span class="cmd cmd_publish"></span><div class="detail" >' +
276 	name +
277 	'<div class="cmds-elem-prop"><span class="label">squery:</span><span class="value">' + squery + '</span></div>' +
278 	'<div class="cmds-elem-prop"><span class="label">query:</span><span class="value">' + Query.simplequerystring(qq) + '</span></div>' + 
279 	'<div class="cmds-elem-prop"><span class="label">collections:</span><span class="value">' + Query.collectiontext(json) + '</span></div>' +
280 	'<div class="cmds-elem-prop"><span class="label">columns:</span><span class="value">' + Query.columnstext(json) + '</span></div>' +
281 	'<div class="cmds-elem-prop"><span class="label">time:</span><span class="value">' + timestr + '</span></div>' +
282 	//'<div class="cmds-elem-prop"><span class="label">startItem:</span><span class="value">' + Query.startItem + '</span></div>' +
283 	//'<div class="cmds-elem-prop"><span class="label">maxItems:</span><span class="value">' + Query.maximumItems + '</span></div>' +
284 	//'<div class="cmds-elem-prop"><span class="label">repository:</span><span class="value">' + Query.repository + '</span></div>' +
285 	'<div class="cmds-elem-prop"><span class="label">bookmark:</span><span class="value">' + json.bookmark + '</span></div>' +
286 	'<div class="cmds-elem-prop"><span class="label">options:</span><span class="value">' + Query.optionstext(json) +  '</span></div>' +
287 	'</div>';
288 	
289 	//dt = Date.parse('2010-10-18, 10:06 AM'); dt.toString('dd/mm/yyyy HH:mm:ss GMT') 
290 	$(qs).append(x);
291 	
292 	var query = new Query([],"","","");
293 	query.load(json);
294 	$(qs).find("[href='"+ id + "_" + i + "']").closest('.cmds-elem-plus').data('query',query);
295 	$(qs).find('.detail').css({'z-index' : '1000'});
296 	
297 	$(qs).find('.input-name').keydown(function(ev){
298 		var evStop = function(){ 
299 			ev.stopPropagation(); 
300 			ev.preventDefault(); 
301 		};
302 		if (ev.which === 13) {
303 			var id = parseInt( $("#qts_select option:selected").val());
304 			$(this).parent().parent().parent().find('a').text($(this).val());
305 			var str = $(this).parent().parent().parent().find('a').attr("href");
306 			var iq = parseInt(str.substring(7));
307 			
308 			jsonw["WorkspaceProfile"]["Querysets"][id]["Queries"][iq].name = $(this).val();
309 			//saveWorkspace("USER");
310 			Workspace.save("USER");
311 			evStop();
312 		}
313 	});
314 	createTooltip(qs);
315 }
316 
317 function createQueriesUI(json, qs){
318 	$(qs).children().remove();
319 	if (json.Queries != "null") {
320 		$.each(json.Queries, function(i,item) {
321 			if (this != "null"){
322 				appendQueryUI(this,i, qs);
323 			}
324 		});
325 	}
326 	
327 }
328 function loadQuerysets(json, type) {
329 	
330 	var $select;
331 	if (type == "user") {
332 		$select = $('#qts_select');
333 	} else {
334 		$select = $('#serverqts_select');
335 	}
336 	
337 	$select.find("option").remove();
338 	
339 	if (String(json) != "null") {
340 		
341 		$.each(json, function(i,item) {
342 			//notifyUser(i + ',' + this.name + ',' + this.created,'debug');
343 		    $select.append(new Option(this.name, i));
344 		});
345 		
346 		
347 		// find id of selected
348 		if ($select.find("option").size() > 0) {
349 			$select.find("option").first().attr("selected","true");
350 			var id = parseInt($select.find("option:selected").val());
351 			var jsonq = json[id];
352 			
353 			if (type == "user") {
354 				$('#qts_input').val(jsonq["name"]);
355 				qs = $("#userqueries");
356 			} else {
357 				qs = $("#serverqueries");
358 			}
359 			createQueriesUI(jsonq, qs);
360 		}
361 		
362 		$select.change(function(data){
363 			if ($select.find("option").size() > 0) {
364 				// find id of selected
365 				var id = parseInt($select.find("option:selected").val());
366 				var jsonq = json[id];
367 				
368 				if (type == "user") {
369 					$('#qts_input').val(jsonq["name"]);
370 					qs = $("#userqueries");
371 				} else {
372 					qs = $("#serverqueries");
373 				}
374 				createQueriesUI(jsonq, qs);
375 				
376 			}
377 	     });
378 		
379 	}
380 
381 }
382 
383 
384 function  preprocessJSON(json){
385 	if (json["Admin"] != undefined) {
386 		if (json["Admin"]["QueryIndices"] != undefined){
387 			if (String(json["Admin"]["QueryIndices"]) != "null") {
388 				if (json["Admin"].QueryIndices[0] == undefined){
389 					var jj = json["Admin"]["QueryIndices"]["item"];
390 					delete json["Admin"]["QueryIndices"]["item"];
391 					json["Admin"]["QueryIndices"] = [{}];
392 					json["Admin"]["QueryIndices"][0] = jj;
393 				}
394 			}
395 		}
396 	}
397 	
398 	
399 	if (json["WorkspaceProfile"]["CustomTermsets"] != undefined){
400 	
401 	if (String(json["WorkspaceProfile"]["CustomTermsets"]) != "null") {
402 		if (json["WorkspaceProfile"].CustomTermsets[0] == undefined){
403 			var jj = json["WorkspaceProfile"]["CustomTermsets"]["item"];
404 			delete json["WorkspaceProfile"]["CustomTermsets"]["item"];
405 			json["WorkspaceProfile"]["CustomTermsets"] = [{}];
406 			json["WorkspaceProfile"]["CustomTermsets"][0] = jj;
407 		}
408 	
409 		
410 		$.each(json["WorkspaceProfile"]["CustomTermsets"], function(i,item) {
411 		    if (this.Terms[0] == undefined){
412 		    	var jj = this["Terms"]["item"];
413 				delete this["Terms"]["item"];
414 				this.Terms = [{}];
415 		    	this.Terms[0] = jj;
416 		    }
417 		});
418 	}
419 	}
420 	if (json["WorkspaceProfile"].Querysets[0] == undefined){
421 		var jj = json["WorkspaceProfile"]["Querysets"]["item"];
422 		delete json["WorkspaceProfile"]["Querysets"]["item"];
423 		json["WorkspaceProfile"]["Querysets"] = [{}];
424 		json["WorkspaceProfile"]["Querysets"][0] = jj;
425 		}
426 	if (String(json["WorkspaceProfile"]["Querysets"]) != "null") {
427 		
428 		$.each(json["WorkspaceProfile"]["Querysets"], function(i,item) {
429 		    if (this.Queries[0] == undefined){
430 		    	var jj = this["Queries"]["item"];
431 				delete this["Queries"]["item"];
432 				this.Queries = [{}];
433 		    	this.Queries[0] = jj;
434 		    }
435 		});
436 		
437 		$.each(json["WorkspaceProfile"]["Querysets"], function(i,item){
438 			if (String(this.Queries) != "null") {
439 				$.each(this.Queries, function(i,item){
440 					if (this.collections != "null") {
441 						if (this.collections[0] == undefined){
442 					    	var jj = this["collections"]["item"];
443 							delete this["collections"]["item"];
444 							this.collections = [{}];
445 					    	this.collections[0] = jj;
446 					    }
447 					}
448 					if (this.columns != "null") {
449 						if (this.columns[0] == undefined){
450 					    	var jj = this["columns"]["item"];
451 							delete this["columns"]["item"];
452 							this.columns = [{}];
453 					    	this.columns[0] = jj;
454 					    }
455 					}
456 				});
457 			}
458 		});
459 	}
460 	
461 	return json;
462 	
463 }
464 
465 
466 
467 
468 function saveTermset(id, name, listwidget) {
469 	var terms = [{}];	
470 	
471 	$.each(listwidget.widgets,function(i,elem){
472 		terms[i] = elem.name;
473 	});
474 	
475 	var dt = new Date();
476 	var str_time = dateFormat(dt);//dt.toString("dd/mm/yyyy HH:mm:ss");
477 	var jsont = {"name":name, "time" : str_time, "Terms" :terms};
478 	if (jsonw["WorkspaceProfile"]["CustomTermsets"] == "null") {
479 		jsonw["WorkspaceProfile"]["CustomTermsets"] = [{}];
480 		if (id == -1) {id = 0;};
481 	}
482 	if (id == -1) {id = jsonw["WorkspaceProfile"]["CustomTermsets"].length;};
483 	jsonw["WorkspaceProfile"]["CustomTermsets"][id] = jsont;
484 	
485 	//saveWorkspace("USER");
486 	Workspace.save("USER");
487 
488 };
489 function removeTermset(id){
490 	var size = jsonw["WorkspaceProfile"]["CustomTermsets"].length;
491 
492 	for (var i=id;i<size-1;i++){
493 		jsonw["WorkspaceProfile"].CustomTermsets[i] = jsonw["WorkspaceProfile"].CustomTermsets[i+1];
494 	}
495 
496 	delete jsonw["WorkspaceProfile"].CustomTermsets[size-1];
497 	jsonw["WorkspaceProfile"]["CustomTermsets"].length = size-1;
498 	// set null string , if 0 
499 	if (size == 1) {
500 		jsonw["WorkspaceProfile"]["CustomTermsets"] = "null";
501 	}
502 	//saveWorkspace("USER");
503 	Workspace.save("USER");
504 }
505 
506 /*
507 function loadWelcomeMessage(){	
508 	$('#welcomedetail').load("/MDService2/docs/xml/welcome #welcome", function() { //profile.collections.base_uri,
509 		$('#welcome').addClass("ui-helper-reset ui-corner-all ui-widget-content");
510 	});
511 }
512 */