]>
Commit | Line | Data |
---|---|---|
5eb34a26 | 1 | #include "AliStorageAdministratorPanelListEvents.h" |
2 | ||
3 | #include <iostream> | |
4 | #include <sstream> | |
5 | #include <vector> | |
6 | ||
7 | #include <TG3DLine.h> | |
8 | #include <TGButton.h> | |
9 | #include <TGFrame.h> | |
10 | ||
11 | #include "zmq.hpp" | |
12 | ||
13 | using namespace std; | |
14 | using namespace zmq; | |
15 | ||
16 | AliStorageAdministratorPanelListEvents *AliStorageAdministratorPanelListEvents::fInstance=0; | |
17 | ||
18 | ClassImp(AliStorageAdministratorPanelListEvents); | |
19 | ||
20 | #define WINDOWS_WIDTH 400 | |
21 | #define WINDOWS_HEIGHT 500 | |
22 | ||
23 | enum BUTTON{ | |
24 | BUTTON_CLOSE=1, | |
25 | BUTTON_GET_LIST, | |
26 | BUTTON_CHECK_PP, | |
27 | BUTTON_CHECK_PBPB, | |
28 | BUTTON_CHECK_TEMP, | |
29 | BUTTON_CHECK_PERM, | |
30 | BUTTON_MARK_EVENT | |
31 | }; | |
32 | ||
33 | enum TEXTENTRY{ | |
34 | TEXTENTRY_RUN_MIN=1, | |
35 | TEXTENTRY_RUN_MAX, | |
36 | TEXTENTRY_EVENT_MIN, | |
37 | TEXTENTRY_EVENT_MAX, | |
38 | TEXTENTRY_MULTIPLICITY_MIN, | |
39 | TEXTENTRY_MULTIPLICITY_MAX | |
40 | }; | |
41 | ||
42 | AliStorageAdministratorPanelListEvents::AliStorageAdministratorPanelListEvents() : | |
43 | TGMainFrame(gClient->GetRoot(),400,400), | |
44 | fStatusLabel(0), | |
45 | fRunNumberMinEntry(0), | |
46 | fRunNumberMaxEntry(0), | |
47 | fEventNumberMinEntry(0), | |
48 | fEventNumberMaxEntry(0), | |
49 | fMultiplicityMinEntry(0), | |
50 | fMultiplicityMaxEntry(0), | |
51 | fProtonProtonCheckButton(0), | |
52 | fLeadLeadCheckButton(0), | |
53 | fTempCheckButton(0), | |
54 | fPermCheckButton(0), | |
55 | fEventsList(0), | |
56 | fEventsListVector(0), | |
57 | fServerSocket(0), | |
58 | fEventManager(0) | |
59 | { | |
60 | fEventManager = new AliStorageEventManager(); | |
61 | InitWindow(); | |
62 | } | |
63 | ||
64 | AliStorageAdministratorPanelListEvents::~AliStorageAdministratorPanelListEvents() | |
65 | { | |
66 | cout<<"ADMIN PANEL -- List events descructor called"; | |
67 | // DestroyWindow(); | |
68 | cout<<" --- OK"<<endl; | |
69 | } | |
70 | ||
71 | AliStorageAdministratorPanelListEvents* AliStorageAdministratorPanelListEvents::GetInstance() | |
72 | { | |
73 | if(!fInstance){fInstance = new AliStorageAdministratorPanelListEvents();} | |
74 | return fInstance; | |
75 | } | |
76 | ||
77 | void AliStorageAdministratorPanelListEvents::SetSocket(socket_t *socket) | |
78 | { | |
79 | fServerSocket = socket; | |
80 | } | |
81 | ||
82 | void AliStorageAdministratorPanelListEvents::InitWindow() | |
83 | { | |
84 | SetCleanup(kDeepCleanup); | |
85 | ||
86 | //min run number | |
87 | AddFrame(new TGLabel(this,"Minimum run number:"),new TGLayoutHints(kLHintsLeft)); | |
88 | ||
89 | fRunNumberMinEntry = new TGNumberEntry(this, | |
90 | 0, | |
91 | 6, | |
92 | TEXTENTRY_RUN_MIN, | |
93 | TGNumberFormat::kNESInteger, | |
94 | TGNumberFormat::kNEAPositive, | |
95 | TGNumberFormat::kNELNoLimits); | |
96 | AddFrame(fRunNumberMinEntry,new TGLayoutHints(kLHintsLeft)); | |
97 | ||
98 | //max run number | |
99 | AddFrame(new TGLabel(this,"Maximum run number:"),new TGLayoutHints(kLHintsLeft)); | |
100 | ||
101 | fRunNumberMaxEntry = new TGNumberEntry(this, | |
102 | 999999, | |
103 | 6, | |
104 | TEXTENTRY_RUN_MAX, | |
105 | TGNumberFormat::kNESInteger, | |
106 | TGNumberFormat::kNEAPositive, | |
107 | TGNumberFormat::kNELNoLimits); | |
108 | AddFrame(fRunNumberMaxEntry,new TGLayoutHints(kLHintsLeft)); | |
109 | ||
110 | //min event number | |
111 | AddFrame(new TGLabel(this,"Minimum event number:"),new TGLayoutHints(kLHintsLeft)); | |
112 | ||
113 | fEventNumberMinEntry = new TGNumberEntry(this, | |
114 | 0, | |
115 | 6, | |
116 | TEXTENTRY_EVENT_MIN, | |
117 | TGNumberFormat::kNESInteger, | |
118 | TGNumberFormat::kNEAPositive, | |
119 | TGNumberFormat::kNELNoLimits); | |
120 | AddFrame(fEventNumberMinEntry,new TGLayoutHints(kLHintsLeft)); | |
121 | ||
122 | //max event number | |
123 | AddFrame(new TGLabel(this,"Maximum event number:"),new TGLayoutHints(kLHintsLeft)); | |
124 | ||
125 | fEventNumberMaxEntry = new TGNumberEntry(this, | |
126 | 99999, | |
127 | 6, | |
128 | TEXTENTRY_EVENT_MAX, | |
129 | TGNumberFormat::kNESInteger, | |
130 | TGNumberFormat::kNEAPositive, | |
131 | TGNumberFormat::kNELNoLimits); | |
132 | AddFrame(fEventNumberMaxEntry,new TGLayoutHints(kLHintsLeft)); | |
133 | ||
134 | //min multiplicity | |
135 | AddFrame(new TGLabel(this,"Minimum multiplicity:"),new TGLayoutHints(kLHintsLeft)); | |
136 | ||
137 | fMultiplicityMinEntry = new TGNumberEntry(this, | |
138 | 0, | |
139 | 6, | |
140 | TEXTENTRY_MULTIPLICITY_MIN, | |
141 | TGNumberFormat::kNESInteger, | |
142 | TGNumberFormat::kNEAPositive, | |
143 | TGNumberFormat::kNELNoLimits); | |
144 | AddFrame(fMultiplicityMinEntry,new TGLayoutHints(kLHintsLeft)); | |
145 | ||
146 | //max multiplicity | |
147 | AddFrame(new TGLabel(this,"Maximum multiplicity:"),new TGLayoutHints(kLHintsLeft)); | |
148 | ||
149 | fMultiplicityMaxEntry = new TGNumberEntry(this, | |
150 | 9999, | |
151 | 6, | |
152 | TEXTENTRY_MULTIPLICITY_MAX, | |
153 | TGNumberFormat::kNESInteger, | |
154 | TGNumberFormat::kNEAPositive, | |
155 | TGNumberFormat::kNELNoLimits); | |
156 | AddFrame(fMultiplicityMaxEntry,new TGLayoutHints(kLHintsLeft)); | |
157 | ||
158 | //p-p check button | |
159 | AddFrame(new TGLabel(this,"System:"),new TGLayoutHints(kLHintsLeft)); | |
160 | fProtonProtonCheckButton = new TGCheckButton(this,"p-p",BUTTON_CHECK_PP); | |
161 | fProtonProtonCheckButton->SetOn(); | |
162 | AddFrame(fProtonProtonCheckButton,new TGLayoutHints(kLHintsLeft)); | |
163 | ||
164 | //Pb-Pb check button | |
165 | fLeadLeadCheckButton = new TGCheckButton(this,"Pb-Pb",BUTTON_CHECK_PBPB); | |
166 | fLeadLeadCheckButton->SetOn(); | |
167 | AddFrame(fLeadLeadCheckButton,new TGLayoutHints(kLHintsLeft)); | |
168 | ||
169 | //temp check button | |
170 | AddFrame(new TGLabel(this,"Storage type:"),new TGLayoutHints(kLHintsLeft)); | |
171 | fTempCheckButton = new TGCheckButton(this,"Temporary",BUTTON_CHECK_TEMP); | |
172 | fTempCheckButton->SetOn(); | |
173 | AddFrame(fTempCheckButton,new TGLayoutHints(kLHintsLeft)); | |
174 | ||
175 | //perm check button | |
176 | fPermCheckButton = new TGCheckButton(this,"Permanent",BUTTON_CHECK_PERM); | |
177 | fPermCheckButton->SetOn(); | |
178 | AddFrame(fPermCheckButton,new TGLayoutHints(kLHintsLeft)); | |
179 | ||
180 | // status label | |
181 | fStatusLabel = new TGLabel(this,""); | |
182 | AddFrame(fStatusLabel,new TGLayoutHints(kLHintsExpandX | kLHintsLeft)); | |
183 | ||
184 | //buttons | |
185 | AddFrame(new TGTextButton(this,"Close",BUTTON_CLOSE), | |
186 | new TGLayoutHints(kLHintsLeft)); | |
187 | ||
188 | AddFrame(new TGTextButton(this,"Get event's list",BUTTON_GET_LIST), | |
189 | new TGLayoutHints(kLHintsRight)); | |
190 | ||
191 | AddFrame(new TGTextButton(this,"Mark selected event",BUTTON_MARK_EVENT), | |
192 | new TGLayoutHints(kLHintsRight)); | |
193 | ||
194 | ||
195 | //event's list | |
196 | fEventsList = new TGListBox(this,0); | |
197 | fEventsList->AddEntry(new TGString("Run Event System Mult Marked"),0); | |
198 | AddFrame(fEventsList,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY)); | |
199 | ||
200 | SetWindowName("List Events"); | |
201 | MapSubwindows(); | |
202 | Resize(WINDOWS_WIDTH,WINDOWS_HEIGHT); | |
203 | MapWindow(); | |
204 | } | |
205 | ||
206 | ||
207 | ||
208 | ||
209 | void AliStorageAdministratorPanelListEvents::onGetListButton() | |
210 | { | |
211 | //prepare and send request message | |
212 | struct serverRequestStruct *requestMessage = new struct serverRequestStruct; | |
213 | struct listRequestStruct list; | |
214 | ||
215 | //get listing parameters from somwhere | |
216 | list.runNumber[0]=fRunNumberMinEntry->GetIntNumber(); | |
217 | list.runNumber[1]=fRunNumberMaxEntry->GetIntNumber(); | |
218 | list.eventNumber[0]=fEventNumberMinEntry->GetIntNumber(); | |
219 | list.eventNumber[1]=fEventNumberMaxEntry->GetIntNumber(); | |
220 | if(fTempCheckButton->GetState()==1) | |
221 | { | |
222 | list.marked[0]=0; | |
223 | } | |
224 | else | |
225 | { | |
226 | list.marked[0]=-1; | |
227 | } | |
228 | if(fPermCheckButton->GetState()==1) | |
229 | { | |
230 | list.marked[1]=1; | |
231 | } | |
232 | else | |
233 | { | |
234 | list.marked[1]=-1; | |
235 | } | |
236 | list.multiplicity[0]=fMultiplicityMinEntry->GetIntNumber(); | |
237 | list.multiplicity[1]=fMultiplicityMaxEntry->GetIntNumber(); | |
238 | if(fProtonProtonCheckButton->GetState()==1) | |
239 | { | |
240 | strcpy(list.system[0],"p-p"); | |
241 | } | |
242 | else | |
243 | { | |
244 | strcpy(list.system[0],""); | |
245 | } | |
246 | if(fLeadLeadCheckButton->GetState()==1) | |
247 | { | |
248 | strcpy(list.system[1],"Pb-Pb"); | |
249 | } | |
250 | else | |
251 | { | |
252 | strcpy(list.system[1],""); | |
253 | } | |
254 | ||
255 | requestMessage->messageType = REQUEST_LIST_EVENTS; | |
256 | requestMessage->list = list; | |
257 | ||
258 | fEventManager->Send(requestMessage,fServerSocket); | |
259 | ||
260 | fEventsList->RemoveAll(); | |
261 | fEventsList->AddEntry(new TGString("Run Event System Mult Marked"),0); | |
262 | ||
263 | vector<serverListStruct> receivedList = fEventManager->GetServerListVector(fServerSocket); | |
264 | ||
265 | cout<<"PANEL:"<<receivedList[0].runNumber<<endl; | |
266 | cout<<"VECTOR SIZE:"<<receivedList.size()<<endl; | |
267 | ||
268 | //do something with list of maching events | |
269 | cout<<"Received list of perm events"<<endl; | |
270 | ||
271 | for(unsigned int i=0;i<receivedList.size();i++) | |
272 | { | |
273 | fEventsList->InsertEntry(Form("%d %d %s %d %d ", | |
274 | receivedList[i].runNumber, | |
275 | receivedList[i].eventNumber, | |
276 | receivedList[i].system, | |
277 | receivedList[i].multiplicity, | |
278 | receivedList[i].marked),i+1,i); | |
279 | ||
280 | cout<<receivedList[i].runNumber<<receivedList[i].eventNumber<<endl; | |
281 | ||
282 | } | |
283 | ||
284 | fEventsListVector = receivedList; | |
285 | ||
286 | gClient->HandleInput(); | |
287 | gClient->NeedRedraw(fEventsList, kTRUE); | |
288 | gClient->HandleInput(); | |
289 | MapSubwindows(); | |
290 | MapWindow(); | |
291 | Layout(); | |
292 | } | |
293 | ||
294 | ||
295 | void AliStorageAdministratorPanelListEvents::onMarkButton() | |
296 | { | |
297 | int runNumber; | |
298 | int eventNumber; | |
299 | ||
300 | //get run and event number from selected row | |
301 | int selectedEventNumber = fEventsList->GetSelected()-1; | |
302 | ||
303 | cout<<"SELECTED:"<<selectedEventNumber<<endl; | |
304 | ||
305 | if(selectedEventNumber<0)return; | |
306 | ||
307 | runNumber=fEventsListVector[selectedEventNumber].runNumber; | |
308 | eventNumber=fEventsListVector[selectedEventNumber].eventNumber; | |
309 | ||
310 | struct serverRequestStruct *requestMessage = new struct serverRequestStruct; | |
311 | struct eventStruct mark; | |
312 | mark.runNumber = runNumber; | |
313 | mark.eventNumber = eventNumber; | |
314 | requestMessage->messageType = REQUEST_MARK_EVENT; | |
315 | requestMessage->event = mark; | |
316 | ||
317 | fEventManager->Send(requestMessage,fServerSocket); | |
318 | ||
319 | message_t *response = new message_t(); | |
320 | fServerSocket->recv(response); | |
321 | char *result = (char*)response->data(); | |
322 | //if(response)delete response; | |
323 | ||
324 | if(!strcmp("true",result)) | |
325 | { | |
326 | fStatusLabel->SetText("Event marked"); | |
327 | cout<<"ADMIN PANEL -- Event marked succesfully"<<endl; | |
328 | } | |
329 | else | |
330 | { | |
331 | fStatusLabel->SetText("Couldn't mark this event"); | |
332 | cout<<"ADMIN PANEL -- Could not matk event"<<endl; | |
333 | } | |
334 | } | |
335 | ||
336 | void AliStorageAdministratorPanelListEvents::onCloseButton(){onExit();} | |
337 | void AliStorageAdministratorPanelListEvents::CloseWindow(){onExit();} | |
338 | ||
339 | void AliStorageAdministratorPanelListEvents::onExit() | |
340 | { | |
341 | cout<<"Quiting list events"; | |
342 | if(fInstance){delete fInstance;fInstance=0;} | |
343 | cout<<" -- OK"<<endl; | |
344 | } | |
345 | ||
346 | Bool_t AliStorageAdministratorPanelListEvents::ProcessMessage(Long_t msg, Long_t parm1, Long_t) | |
347 | { | |
348 | switch (GET_MSG(msg)) | |
349 | { | |
350 | case kC_COMMAND: | |
351 | switch (GET_SUBMSG(msg)) | |
352 | { | |
353 | case kCM_BUTTON: | |
354 | switch(parm1) | |
355 | { | |
356 | case BUTTON_CLOSE:onCloseButton();break; | |
357 | case BUTTON_GET_LIST:onGetListButton();break; | |
358 | case BUTTON_MARK_EVENT:onMarkButton();break; | |
359 | default:break; | |
360 | } | |
361 | break; | |
362 | default:break; | |
363 | } | |
364 | break; | |
365 | default:break; | |
366 | } | |
367 | ||
368 | return false; | |
369 | } |