MessageAttributes.C 18 KB
Newer Older
hrchilds's avatar
hrchilds committed
1
2
/*****************************************************************************
*
brugger's avatar
 
brugger committed
3
* Copyright (c) 2000 - 2008, Lawrence Livermore National Security, LLC
hrchilds's avatar
hrchilds committed
4
* Produced at the Lawrence Livermore National Laboratory
brugger's avatar
 
brugger committed
5
* LLNL-CODE-400142
hrchilds's avatar
hrchilds committed
6
7
* All rights reserved.
*
brugger's avatar
 
brugger committed
8
* This file is  part of VisIt. For  details, see https://visit.llnl.gov/.  The
hrchilds's avatar
hrchilds committed
9
10
11
12
13
14
15
16
17
18
* full copyright notice is contained in the file COPYRIGHT located at the root
* of the VisIt distribution or at http://www.llnl.gov/visit/copyright.html.
*
* Redistribution  and  use  in  source  and  binary  forms,  with  or  without
* modification, are permitted provided that the following conditions are met:
*
*  - Redistributions of  source code must  retain the above  copyright notice,
*    this list of conditions and the disclaimer below.
*  - Redistributions in binary form must reproduce the above copyright notice,
*    this  list of  conditions  and  the  disclaimer (as noted below)  in  the
brugger's avatar
 
brugger committed
19
20
21
*    documentation and/or other materials provided with the distribution.
*  - Neither the name of  the LLNS/LLNL nor the names of  its contributors may
*    be used to endorse or promote products derived from this software without
hrchilds's avatar
hrchilds committed
22
23
24
25
26
*    specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT  HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR  IMPLIED WARRANTIES, INCLUDING,  BUT NOT  LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND  FITNESS FOR A PARTICULAR  PURPOSE
brugger's avatar
 
brugger committed
27
28
29
* ARE  DISCLAIMED. IN  NO EVENT  SHALL LAWRENCE  LIVERMORE NATIONAL  SECURITY,
* LLC, THE  U.S.  DEPARTMENT OF  ENERGY  OR  CONTRIBUTORS BE  LIABLE  FOR  ANY
* DIRECT,  INDIRECT,   INCIDENTAL,   SPECIAL,   EXEMPLARY,  OR   CONSEQUENTIAL
hrchilds's avatar
hrchilds committed
30
31
32
33
34
35
36
37
38
* DAMAGES (INCLUDING, BUT NOT  LIMITED TO, PROCUREMENT OF  SUBSTITUTE GOODS OR
* SERVICES; LOSS OF  USE, DATA, OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER
* CAUSED  AND  ON  ANY  THEORY  OF  LIABILITY,  WHETHER  IN  CONTRACT,  STRICT
* LIABILITY, OR TORT  (INCLUDING NEGLIGENCE OR OTHERWISE)  ARISING IN ANY  WAY
* OUT OF THE  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
*****************************************************************************/

hrchilds's avatar
hrchilds committed
39
40
41
42
43
44
45
46
#include <MessageAttributes.h>
#include <DataNode.h>

//
// Enum conversion methods for MessageAttributes::Severity
//

static const char *Severity_strings[] = {
hrchilds's avatar
hrchilds committed
47
"Error", "Warning", "Message", 
whitlocb's avatar
whitlocb committed
48
"ErrorClear", "Information"};
hrchilds's avatar
hrchilds committed
49
50
51
52

std::string
MessageAttributes::Severity_ToString(MessageAttributes::Severity t)
{
hrchilds's avatar
hrchilds committed
53
    int index = int(t);
whitlocb's avatar
whitlocb committed
54
    if(index < 0 || index >= 5) index = 0;
hrchilds's avatar
hrchilds committed
55
    return Severity_strings[index];
hrchilds's avatar
hrchilds committed
56
57
58
59
60
}

std::string
MessageAttributes::Severity_ToString(int t)
{
whitlocb's avatar
whitlocb committed
61
    int index = (t < 0 || t >= 5) ? 0 : t;
hrchilds's avatar
hrchilds committed
62
    return Severity_strings[index];
hrchilds's avatar
hrchilds committed
63
64
65
66
67
}

bool
MessageAttributes::Severity_FromString(const std::string &s, MessageAttributes::Severity &val)
{
hrchilds's avatar
hrchilds committed
68
    val = MessageAttributes::Error;
whitlocb's avatar
whitlocb committed
69
    for(int i = 0; i < 5; ++i)
hrchilds's avatar
hrchilds committed
70
71
72
73
74
75
76
77
78
79
    {
        if(s == Severity_strings[i])
        {
            val = (Severity)i;
            return true;
        }
    }
    return false;
}

whitlocb's avatar
whitlocb committed
80
// Type map format string
81
const char *MessageAttributes::TypeMapFormatString = "su*bi";
whitlocb's avatar
whitlocb committed
82

hrchilds's avatar
hrchilds committed
83
84
85
86
87
88
89
90
91
// ****************************************************************************
// Method: MessageAttributes::MessageAttributes
//
// Purpose: 
//   Constructor for the MessageAttributes class.
//
// Note:       Autogenerated by xml2atts.
//
// Programmer: xml2atts
92
// Creation:   omitted
hrchilds's avatar
hrchilds committed
93
94
95
96
97
//
// Modifications:
//   
// ****************************************************************************

whitlocb's avatar
whitlocb committed
98
99
MessageAttributes::MessageAttributes() : 
    AttributeSubject(MessageAttributes::TypeMapFormatString)
hrchilds's avatar
hrchilds committed
100
{
101
    hasUnicode = false;
hrchilds's avatar
hrchilds committed
102
103
104
105
106
107
108
109
110
111
112
113
    severity = Message;
}

// ****************************************************************************
// Method: MessageAttributes::MessageAttributes
//
// Purpose: 
//   Copy constructor for the MessageAttributes class.
//
// Note:       Autogenerated by xml2atts.
//
// Programmer: xml2atts
114
// Creation:   omitted
hrchilds's avatar
hrchilds committed
115
116
117
118
119
//
// Modifications:
//   
// ****************************************************************************

whitlocb's avatar
whitlocb committed
120
121
MessageAttributes::MessageAttributes(const MessageAttributes &obj) : 
    AttributeSubject(MessageAttributes::TypeMapFormatString)
hrchilds's avatar
hrchilds committed
122
123
{
    text = obj.text;
124
125
    unicode = obj.unicode;
    hasUnicode = obj.hasUnicode;
hrchilds's avatar
hrchilds committed
126
127
128
129
130
131
132
133
134
135
136
137
138
139
    severity = obj.severity;

    SelectAll();
}

// ****************************************************************************
// Method: MessageAttributes::~MessageAttributes
//
// Purpose: 
//   Destructor for the MessageAttributes class.
//
// Note:       Autogenerated by xml2atts.
//
// Programmer: xml2atts
140
// Creation:   omitted
hrchilds's avatar
hrchilds committed
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
//
// Modifications:
//   
// ****************************************************************************

MessageAttributes::~MessageAttributes()
{
    // nothing here
}

// ****************************************************************************
// Method: MessageAttributes::operator = 
//
// Purpose: 
//   Assignment operator for the MessageAttributes class.
//
// Note:       Autogenerated by xml2atts.
//
// Programmer: xml2atts
160
// Creation:   omitted
hrchilds's avatar
hrchilds committed
161
162
163
164
165
//
// Modifications:
//   
// ****************************************************************************

hrchilds's avatar
hrchilds committed
166
MessageAttributes& 
hrchilds's avatar
hrchilds committed
167
168
MessageAttributes::operator = (const MessageAttributes &obj)
{
hrchilds's avatar
hrchilds committed
169
    if (this == &obj) return *this;
hrchilds's avatar
hrchilds committed
170
    text = obj.text;
171
172
    unicode = obj.unicode;
    hasUnicode = obj.hasUnicode;
hrchilds's avatar
hrchilds committed
173
174
175
    severity = obj.severity;

    SelectAll();
hrchilds's avatar
hrchilds committed
176
    return *this;
hrchilds's avatar
hrchilds committed
177
178
179
180
181
182
183
184
185
186
187
}

// ****************************************************************************
// Method: MessageAttributes::operator == 
//
// Purpose: 
//   Comparison operator == for the MessageAttributes class.
//
// Note:       Autogenerated by xml2atts.
//
// Programmer: xml2atts
188
// Creation:   omitted
hrchilds's avatar
hrchilds committed
189
190
191
192
193
194
195
196
197
198
//
// Modifications:
//   
// ****************************************************************************

bool
MessageAttributes::operator == (const MessageAttributes &obj) const
{
    // Create the return value
    return ((text == obj.text) &&
199
200
            (unicode == obj.unicode) &&
            (hasUnicode == obj.hasUnicode) &&
hrchilds's avatar
hrchilds committed
201
202
203
204
205
206
207
208
209
210
211
212
            (severity == obj.severity));
}

// ****************************************************************************
// Method: MessageAttributes::operator != 
//
// Purpose: 
//   Comparison operator != for the MessageAttributes class.
//
// Note:       Autogenerated by xml2atts.
//
// Programmer: xml2atts
213
// Creation:   omitted
hrchilds's avatar
hrchilds committed
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
//
// Modifications:
//   
// ****************************************************************************

bool
MessageAttributes::operator != (const MessageAttributes &obj) const
{
    return !(this->operator == (obj));
}

// ****************************************************************************
// Method: MessageAttributes::TypeName
//
// Purpose: 
//   Type name method for the MessageAttributes class.
//
// Note:       Autogenerated by xml2atts.
//
// Programmer: xml2atts
234
// Creation:   omitted
hrchilds's avatar
hrchilds committed
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
//
// Modifications:
//   
// ****************************************************************************

const std::string
MessageAttributes::TypeName() const
{
    return "MessageAttributes";
}

// ****************************************************************************
// Method: MessageAttributes::CopyAttributes
//
// Purpose: 
//   CopyAttributes method for the MessageAttributes class.
//
// Note:       Autogenerated by xml2atts.
//
// Programmer: xml2atts
255
// Creation:   omitted
hrchilds's avatar
hrchilds committed
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
//
// Modifications:
//   
// ****************************************************************************

bool
MessageAttributes::CopyAttributes(const AttributeGroup *atts)
{
    if(TypeName() != atts->TypeName())
        return false;

    // Call assignment operator.
    const MessageAttributes *tmp = (const MessageAttributes *)atts;
    *this = *tmp;

    return true;
}

// ****************************************************************************
// Method: MessageAttributes::CreateCompatible
//
// Purpose: 
//   CreateCompatible method for the MessageAttributes class.
//
// Note:       Autogenerated by xml2atts.
//
// Programmer: xml2atts
283
// Creation:   omitted
hrchilds's avatar
hrchilds committed
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
//
// Modifications:
//   
// ****************************************************************************

AttributeSubject *
MessageAttributes::CreateCompatible(const std::string &tname) const
{
    AttributeSubject *retval = 0;
    if(TypeName() == tname)
        retval = new MessageAttributes(*this);
    // Other cases could go here too. 

    return retval;
}

hrchilds's avatar
hrchilds committed
300
301
302
303
304
305
306
307
308
// ****************************************************************************
// Method: MessageAttributes::NewInstance
//
// Purpose: 
//   NewInstance method for the MessageAttributes class.
//
// Note:       Autogenerated by xml2atts.
//
// Programmer: xml2atts
309
// Creation:   omitted
hrchilds's avatar
hrchilds committed
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
//
// Modifications:
//   
// ****************************************************************************

AttributeSubject *
MessageAttributes::NewInstance(bool copy) const
{
    AttributeSubject *retval = 0;
    if(copy)
        retval = new MessageAttributes(*this);
    else
        retval = new MessageAttributes;

    return retval;
}

hrchilds's avatar
hrchilds committed
327
328
329
330
331
332
333
334
335
// ****************************************************************************
// Method: MessageAttributes::SelectAll
//
// Purpose: 
//   Selects all attributes.
//
// Note:       Autogenerated by xml2atts.
//
// Programmer: xml2atts
336
// Creation:   omitted
hrchilds's avatar
hrchilds committed
337
338
339
340
341
342
343
344
//
// Modifications:
//   
// ****************************************************************************

void
MessageAttributes::SelectAll()
{
345
346
347
348
    Select(ID_text,       (void *)&text);
    Select(ID_unicode,    (void *)&unicode);
    Select(ID_hasUnicode, (void *)&hasUnicode);
    Select(ID_severity,   (void *)&severity);
hrchilds's avatar
hrchilds committed
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
}

///////////////////////////////////////////////////////////////////////////////
// Persistence methods
///////////////////////////////////////////////////////////////////////////////

// ****************************************************************************
// Method: MessageAttributes::CreateNode
//
// Purpose: 
//   This method creates a DataNode representation of the object so it can be saved to a config file.
//
// Note:       Autogenerated by xml2atts.
//
// Programmer: xml2atts
364
// Creation:   omitted
hrchilds's avatar
hrchilds committed
365
366
367
368
369
370
//
// Modifications:
//   
// ****************************************************************************

bool
hrchilds's avatar
hrchilds committed
371
MessageAttributes::CreateNode(DataNode *parentNode, bool completeSave, bool forceAdd)
hrchilds's avatar
hrchilds committed
372
373
374
375
376
377
378
379
380
{
    if(parentNode == 0)
        return false;

    MessageAttributes defaultObject;
    bool addToParent = false;
    // Create a node for MessageAttributes.
    DataNode *node = new DataNode("MessageAttributes");

whitlocb's avatar
whitlocb committed
381
    if(completeSave || !FieldsEqual(ID_text, &defaultObject))
hrchilds's avatar
hrchilds committed
382
383
384
385
386
    {
        addToParent = true;
        node->AddNode(new DataNode("text", text));
    }

387
388
389
390
391
392
393
394
395
396
397
398
    if(completeSave || !FieldsEqual(ID_unicode, &defaultObject))
    {
        addToParent = true;
        node->AddNode(new DataNode("unicode", unicode));
    }

    if(completeSave || !FieldsEqual(ID_hasUnicode, &defaultObject))
    {
        addToParent = true;
        node->AddNode(new DataNode("hasUnicode", hasUnicode));
    }

whitlocb's avatar
whitlocb committed
399
    if(completeSave || !FieldsEqual(ID_severity, &defaultObject))
hrchilds's avatar
hrchilds committed
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
    {
        addToParent = true;
        node->AddNode(new DataNode("severity", Severity_ToString(severity)));
    }


    // Add the node to the parent node.
    if(addToParent || forceAdd)
        parentNode->AddNode(node);
    else
        delete node;

    return (addToParent || forceAdd);
}

// ****************************************************************************
// Method: MessageAttributes::SetFromNode
//
// Purpose: 
//   This method sets attributes in this object from values in a DataNode representation of the object.
//
// Note:       Autogenerated by xml2atts.
//
// Programmer: xml2atts
424
// Creation:   omitted
hrchilds's avatar
hrchilds committed
425
426
427
428
429
430
431
432
//
// Modifications:
//   
// ****************************************************************************

void
MessageAttributes::SetFromNode(DataNode *parentNode)
{
hrchilds's avatar
hrchilds committed
433
    int i;
hrchilds's avatar
hrchilds committed
434
435
436
437
438
439
440
441
442
443
    if(parentNode == 0)
        return;

    DataNode *searchNode = parentNode->GetNode("MessageAttributes");
    if(searchNode == 0)
        return;

    DataNode *node;
    if((node = searchNode->GetNode("text")) != 0)
        SetText(node->AsString());
444
445
446
447
    if((node = searchNode->GetNode("unicode")) != 0)
        SetUnicode(node->AsUnsignedCharVector());
    if((node = searchNode->GetNode("hasUnicode")) != 0)
        SetHasUnicode(node->AsBool());
hrchilds's avatar
hrchilds committed
448
449
450
451
    if((node = searchNode->GetNode("severity")) != 0)
    {
        // Allow enums to be int or string in the config file
        if(node->GetNodeType() == INT_NODE)
hrchilds's avatar
hrchilds committed
452
453
        {
            int ival = node->AsInt();
whitlocb's avatar
whitlocb committed
454
            if(ival >= 0 && ival < 5)
hrchilds's avatar
hrchilds committed
455
456
                SetSeverity(Severity(ival));
        }
hrchilds's avatar
hrchilds committed
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
        else if(node->GetNodeType() == STRING_NODE)
        {
            Severity value;
            if(Severity_FromString(node->AsString(), value))
                SetSeverity(value);
        }
    }
}

///////////////////////////////////////////////////////////////////////////////
// Set property methods
///////////////////////////////////////////////////////////////////////////////

void
MessageAttributes::SetText(const std::string &text_)
{
    text = text_;
whitlocb's avatar
whitlocb committed
474
    Select(ID_text, (void *)&text);
hrchilds's avatar
hrchilds committed
475
476
}

477
478
479
480
481
482
483
484
485
486
487
488
489
490
void
MessageAttributes::SetUnicode(const unsignedCharVector &unicode_)
{
    unicode = unicode_;
    Select(ID_unicode, (void *)&unicode);
}

void
MessageAttributes::SetHasUnicode(bool hasUnicode_)
{
    hasUnicode = hasUnicode_;
    Select(ID_hasUnicode, (void *)&hasUnicode);
}

hrchilds's avatar
hrchilds committed
491
492
493
494
void
MessageAttributes::SetSeverity(MessageAttributes::Severity severity_)
{
    severity = severity_;
whitlocb's avatar
whitlocb committed
495
    Select(ID_severity, (void *)&severity);
hrchilds's avatar
hrchilds committed
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
}

///////////////////////////////////////////////////////////////////////////////
// Get property methods
///////////////////////////////////////////////////////////////////////////////

const std::string &
MessageAttributes::GetText() const
{
    return text;
}

std::string &
MessageAttributes::GetText()
{
    return text;
}

514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
const unsignedCharVector &
MessageAttributes::GetUnicode() const
{
    return unicode;
}

unsignedCharVector &
MessageAttributes::GetUnicode()
{
    return unicode;
}

bool
MessageAttributes::GetHasUnicode() const
{
    return hasUnicode;
}

hrchilds's avatar
hrchilds committed
532
533
534
535
536
537
538
539
540
541
542
543
544
MessageAttributes::Severity
MessageAttributes::GetSeverity() const
{
    return Severity(severity);
}

///////////////////////////////////////////////////////////////////////////////
// Select property methods
///////////////////////////////////////////////////////////////////////////////

void
MessageAttributes::SelectText()
{
whitlocb's avatar
whitlocb committed
545
    Select(ID_text, (void *)&text);
hrchilds's avatar
hrchilds committed
546
547
}

548
549
550
551
552
553
void
MessageAttributes::SelectUnicode()
{
    Select(ID_unicode, (void *)&unicode);
}

hrchilds's avatar
hrchilds committed
554
555
556
557
558
559
560
561
562
563
564
565
566
///////////////////////////////////////////////////////////////////////////////
// Keyframing methods
///////////////////////////////////////////////////////////////////////////////

// ****************************************************************************
// Method: MessageAttributes::GetFieldName
//
// Purpose: 
//   This method returns the name of a field given its index.
//
// Note:       Autogenerated by xml2atts.
//
// Programmer: xml2atts
567
// Creation:   omitted
hrchilds's avatar
hrchilds committed
568
569
570
571
572
573
574
575
576
577
//
// Modifications:
//   
// ****************************************************************************

std::string
MessageAttributes::GetFieldName(int index) const
{
    switch (index)
    {
578
579
580
581
    case ID_text:       return "text";
    case ID_unicode:    return "unicode";
    case ID_hasUnicode: return "hasUnicode";
    case ID_severity:   return "severity";
whitlocb's avatar
whitlocb committed
582
    default:  return "invalid index";
hrchilds's avatar
hrchilds committed
583
584
585
586
587
588
589
590
591
592
593
594
    }
}

// ****************************************************************************
// Method: MessageAttributes::GetFieldType
//
// Purpose: 
//   This method returns the type of a field given its index.
//
// Note:       Autogenerated by xml2atts.
//
// Programmer: xml2atts
595
// Creation:   omitted
hrchilds's avatar
hrchilds committed
596
597
598
599
600
601
602
603
604
605
//
// Modifications:
//   
// ****************************************************************************

AttributeGroup::FieldType
MessageAttributes::GetFieldType(int index) const
{
    switch (index)
    {
606
607
608
609
    case ID_text:       return FieldType_string;
    case ID_unicode:    return FieldType_ucharVector;
    case ID_hasUnicode: return FieldType_bool;
    case ID_severity:   return FieldType_enum;
whitlocb's avatar
whitlocb committed
610
    default:  return FieldType_unknown;
hrchilds's avatar
hrchilds committed
611
612
613
614
615
616
617
618
619
620
621
622
    }
}

// ****************************************************************************
// Method: MessageAttributes::GetFieldTypeName
//
// Purpose: 
//   This method returns the name of a field type given its index.
//
// Note:       Autogenerated by xml2atts.
//
// Programmer: xml2atts
623
// Creation:   omitted
hrchilds's avatar
hrchilds committed
624
625
626
627
628
629
630
631
632
633
//
// Modifications:
//   
// ****************************************************************************

std::string
MessageAttributes::GetFieldTypeName(int index) const
{
    switch (index)
    {
634
635
636
637
    case ID_text:       return "string";
    case ID_unicode:    return "ucharVector";
    case ID_hasUnicode: return "bool";
    case ID_severity:   return "enum";
whitlocb's avatar
whitlocb committed
638
    default:  return "invalid index";
hrchilds's avatar
hrchilds committed
639
640
641
642
643
644
645
646
647
648
649
650
    }
}

// ****************************************************************************
// Method: MessageAttributes::FieldsEqual
//
// Purpose: 
//   This method compares two fields and return true if they are equal.
//
// Note:       Autogenerated by xml2atts.
//
// Programmer: xml2atts
651
// Creation:   omitted
hrchilds's avatar
hrchilds committed
652
653
654
655
656
657
658
659
660
661
662
663
//
// Modifications:
//   
// ****************************************************************************

bool
MessageAttributes::FieldsEqual(int index_, const AttributeGroup *rhs) const
{
    const MessageAttributes &obj = *((const MessageAttributes*)rhs);
    bool retval = false;
    switch (index_)
    {
whitlocb's avatar
whitlocb committed
664
    case ID_text:
hrchilds's avatar
hrchilds committed
665
666
667
668
        {  // new scope
        retval = (text == obj.text);
        }
        break;
669
670
671
672
673
674
675
676
677
678
    case ID_unicode:
        {  // new scope
        retval = (unicode == obj.unicode);
        }
        break;
    case ID_hasUnicode:
        {  // new scope
        retval = (hasUnicode == obj.hasUnicode);
        }
        break;
whitlocb's avatar
whitlocb committed
679
    case ID_severity:
hrchilds's avatar
hrchilds committed
680
681
682
683
684
685
686
687
688
689
690
691
692
693
        {  // new scope
        retval = (severity == obj.severity);
        }
        break;
    default: retval = false;
    }

    return retval;
}

///////////////////////////////////////////////////////////////////////////////
// User-defined methods.
///////////////////////////////////////////////////////////////////////////////