]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STORAGE/AliStorageAdministratorPanelListEvents.cxx
Fix for coverity (AdC)
[u/mrichter/AliRoot.git] / STORAGE / AliStorageAdministratorPanelListEvents.cxx
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 }