Mercurial > hg > ltpda
view m-toolbox/classes/@repogui/buildHLQPanel.m @ 11:9174aadb93a5 database-connection-manager
Add LTPDA Repository utility functions into utils.repository
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Mon, 05 Dec 2011 16:20:06 +0100 |
parents | f0afece42f48 |
children |
line wrap: on
line source
% BUILDHLQPANEL build the High Level Queries panel. % % N Tateo 16-04-09 % % $Id: buildHLQPanel.m,v 1.6 2011/04/08 08:56:25 hewitson Exp $ % function buildHLQPanel(mainfig) import utils.const.* utils.helper.msg(msg.PROC1, 'building High Level Queries Panel'); htab = mainfig.panels(5); Gproperties = mainfig.Gproperties; pmarg = 0.025; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % List of HLQs: hlq_name = 'ao.name = ''name'' AND tsdata.t0 > x'; hlq_desc = 'Select AOs with tsdata of given channel name and initial time successive to a given t0.'; hlq_str = ['select objmeta.obj_id from objmeta,ao,tsdata '... 'where objmeta.obj_id = ao.obj_id '... 'and ao.data_id = tsdata.id '... 'and objmeta.name=''var_1'' '... 'and tsdata.t0>=''var_2''']; % Each HLQ has its proper list of parameters to set. Each parameter is % defined inside a plist: % - name: the name of the parameters to set. % - type: edit, list, popup, time. % - values: if list/popup, the possible values to choose among. % - default: the default value associated to the parameter. hlq_vars.v1 = plist( ... 'name', 'Name:', ... 'type', 'string', ... 'values', [], ... 'default', 'x1'); hlq_vars.v2 = plist( ... 'name', 'Initial time:', ... 'type', 'time', ... 'values', [], ... 'default', '1970-01-01 00:00:00.000'); hlq1 = {hlq_name , hlq_desc , hlq_str , hlq_vars}; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% hlq_name = 'ao.name = ''name'' AND x < tsdata.t0 < y'; hlq_desc = 'Select AOs with tsdata of given channel name and initial time comprised in a given interval'; hlq_str = ['select objmeta.obj_id from objmeta,ao,tsdata ' ... 'where objmeta.obj_id=ao.obj_id ' ... 'and ao.data_id=tsdata.id ' ... 'and objmeta.name = ''var_1'' ' ... 'and tsdata.t0 >= ''var_2'' ' ... 'and tsdata.t0+INTERVAL tsdata.nsecs SECOND <= ''var_3'' ']; hlq_vars.v1 = plist( ... 'name', 'Name:', ... 'type', 'string', ... 'values', [], ... 'default', 'x1'); hlq_vars.v2 = plist( ... 'name', 'Initial time:', ... 'type', 'time', ... 'values', [], ... 'default', '1970-01-01 00:00:00.000'); hlq_vars.v3 = plist( ... 'name', 'Final time:', ... 'type', 'time', ... 'values', [], ... 'default', '1970-01-02 00:00:00.000'); hlq2 = {hlq_name , hlq_desc , hlq_str , hlq_vars}; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % hlq_name = 'Query name 3'; % hlq_desc = 'Query description'; % hlq_str = 'query_string'; % hlq_vars.v1 = plist( ... % 'name', '', ... % 'type', '', ... % 'values', [], ... % 'default', []); % hlq_vars.v2 = plist( ... % 'name', '', ... % 'type', '', ... % 'values', [], ... % 'default', []); % hlq3 = {hlq_name , hlq_desc , hlq_str , hlq_vars}; HLQ = [ hlq1 ; hlq2 ]; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CommonHeight = 0.06; % header bw = 0.4; bl = pmarg; bh = CommonHeight; bb = 1-2*pmarg-bh; hlqText = uicontrol(htab, 'Style','text',... 'String', 'High Level Queries:',... 'BackgroundColor', 'w', ... 'Units', 'normalized', ... 'Userdata',1,... 'Fontsize', Gproperties.fontsize+2, ... 'Position',[bl bb bw bh]); % list box bh = 0.65; bb = bb - bh - .03; hlqListbox = uicontrol(htab,'Style','list',... 'String',HLQ(:,1),... 'Min',1,... 'Max',1,... 'BackgroundColor', 'w',... 'Fontsize', Gproperties.fontsize,... 'Units', 'normalized', ... 'Position', [bl bb bw bh],... 'TooltipString', 'These are the supported High Level Queries',... 'UserData', HLQ, ... 'Tag', 'RepoguiHLQList' , ... 'Callback' , @hlqListboxCbk ); % description field bh = 0.2; bb = bb - bh - .03; bw = .3; hlqDescbox = uicontrol(htab,'Style','text',... 'String',HLQ{1,2},... 'BackgroundColor', 'w',... 'Fontsize', Gproperties.fontsize,... 'Units', 'normalized', ... 'Position', [bl bb bw bh],... 'Tag', 'RepoguiHLQDesc'); % set button bh = 0.1; bw = 0.1; bl = .4 + pmarg - bw; pbh = uicontrol(htab,'Style','pushbutton',... 'String','Set',... 'Callback', {'repogui.cb_submit', mainfig}, ... 'Units', 'normalized', ... 'Fontsize', Gproperties.fontsize, ... 'Position',[bl bb+.1 bw bh], ... 'Tag','hlqSetButton', ... 'Callback' , @hlqSetButtonCbk ); % query button uicontrol(htab, ... 'Style','pushbutton', ... 'String','Execute query', ... 'Units', 'normalized', ... 'Position',[.7 0 .29 .06], ... 'Tag', 'executeHLQbutton', ... 'Callback', @hlqExecQuery, ... 'Userdata', mainfig, ... 'enable', 'off'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Dynamical part of the panel bl = .45; bb = .08; bw = .54; bh = .88; dynpanel = uipanel(htab, ... 'BackGroundColor', 'w', ... 'Title' , 'Query settings:', ... 'Position', [bl bb bw bh], ... 'Tag', 'dynamicPanel', ... 'Visible', 'on'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% end function hlqListboxCbk(hObject,varargin) % Callback associated to the HLQ listbox currVal = get(hObject,'Value'); hlq = get(hObject,'UserData'); currHLQ = hlq(currVal,:); set(findobj(gcf,'Tag','RepoguiHLQDesc'),'String',currHLQ{2}) end function hlqSetButtonCbk(hObject,varargin) % Callback associated to the set button currVal = get(findobj(gcf,'Tag','RepoguiHLQList'),'Value'); hlq = get(findobj(gcf,'Tag','RepoguiHLQList'),'UserData'); hlq = hlq(currVal,:); hlq_vars = hlq{4}; dynPanel = findobj(gcf,'Tag','dynamicPanel'); set(dynPanel,'Visible','on'); set(findobj(gcf,'Tag','executeHLQbutton'),'enable','on') delete(findobj(gcf,'Parent',dynPanel)) drawDynamicPanel(dynPanel, hlq_vars,get(hObject,'FontSize')) end function drawDynamicPanel(dynPanel, hlq_vars, fontsize) % To draw the dynamic panel, showing all query settings. bl = .05; bb = .95; bh = .1; var_numb = numel(fieldnames(hlq_vars)); for ii = 1:var_numb curr_var = ['v' num2str(ii)]; curr_var = hlq_vars.(curr_var); % this is the plist var_name = find(curr_var,'name'); var_type = find(curr_var,'type'); var_val = find(curr_var,'default'); bb = bb - .12; bw = .4; switch var_type case 'string' uicontrol(dynPanel, ... 'Style','text', ... 'String', var_name, ... 'HorizontalAlignment', 'right', ... 'BackgroundColor', 'w', ... 'ForegroundColor', 'k', ... 'Fontsize', fontsize+1, ... 'Units', 'normalized', ... 'Position',[bl bb bw bh]); uicontrol(dynPanel, ... 'Style','edit', ... 'String', var_val, ... 'HorizontalAlignment', 'center', ... 'BackgroundColor', 'w', ... 'ForegroundColor', 'k', ... 'Fontsize', fontsize+1, ... 'Units', 'normalized', ... 'Position',[bl+bw+.02 , bb+.038 , bw+.08 , .08],... 'Tag',['var_' num2str(ii)]); case 'time' bw = .3; uicontrol(dynPanel, ... 'Style','text', ... 'String', var_name, ... 'HorizontalAlignment', 'right', ... 'BackgroundColor', 'w', ... 'ForegroundColor', 'k', ... 'Fontsize', fontsize+1, ... 'Units', 'normalized', ... 'Position',[bl-.03 bb bw-.05 bh]); uicontrol(dynPanel, ... 'Style','edit', ... 'String', var_val, ... 'TooltipString', 'epoch in milliseconds [0] or time string [1970-01-01 00:00:00.000]', ... 'HorizontalAlignment', 'center', ... 'BackgroundColor', 'w', ... 'ForegroundColor', 'k', ... 'Fontsize', fontsize+1, ... 'Units', 'normalized', ... 'Position',[bl+bw-.06 , bb+.038 , bw+.18 , .08],... 'Tag',['var_' num2str(ii)], ... 'Callback', @checkTimeInput ); prefs = getappdata(0, 'LTPDApreferences'); timezoneList = utils.timetools.getTimezone; currTimeZone = find(ismember(timezoneList,prefs.time.timezone)); uicontrol(dynPanel, ... 'Style','popupmenu', ... 'String', timezoneList, ... 'Value', currTimeZone, ... 'TooltipString', 'Timezone', ... 'HorizontalAlignment', 'center', ... 'BackgroundColor', 'w', ... 'ForegroundColor', 'k', ... 'Fontsize', fontsize+1, ... 'Units', 'normalized', ... 'Position',[bl+bw+.435 , bb+.038 , .2 , .08],... 'Tag',['timezone_' num2str(ii)], ... 'Callback' , 'set(findobj(gcf,''TooltipString'',''Timezone''),''Value'',get(gco,''Value''))' ); end end end function checkTimeInput(hObject, varargin) input = get(hObject,'String'); if ~isnan(str2double(input)) date_str = datestr(str2double(input),'yyyy-mm-dd HH:MM:SS.FFF'); set(hObject,'String',date_str); end end function hlqExecQuery(hObject,varargin) % Callback associated to the set button mainfig = get(hObject,'Userdata'); HLQlist = findobj(gcf,'Tag','RepoguiHLQList'); HLQ = get(HLQlist,'Userdata'); currHLQ = get(HLQlist,'Value'); currHLQ = HLQ(currHLQ,:); hlq_str = currHLQ{3}; hlq_vars = currHLQ{4}; var_numb = numel(fieldnames(hlq_vars)); for ii=1:var_numb var_str = findobj(gcf,'Tag',['var_' num2str(ii)]); var_str = get(var_str,'String'); var_type = find(hlq_vars.(['v' num2str(ii)]), 'type'); % switch var_type % case 'time' % % Convert the string in UTC timezone % timezone = get(findobj(gcf,'Tag',['timezone_' num2str(currVal)]),'Value'); % timezoneList = utils.timetools.getTimezone; % timezone = timezoneList(timezone); % if ~strcmp(timezone,'UTC') % var_str = char(setTimezone( time(plist('time_str',time_str,'timezone',timezone) ,'UTC')); % end % end hlq_str = strrep(hlq_str, ['var_' num2str(ii)], var_str); end repogui.cb_executeQuery(hlq_str,mainfig) end