xref: /haiku/src/tests/add-ons/print/ppd/model/Statement.cpp (revision 17889a8c70dbb3d59c1412f6431968753c767bab)
1 /*
2  * Copyright 2008, Haiku.
3  * Distributed under the terms of the MIT license.
4  *
5  * Authors:
6  *		Michael Pfeiffer <laplace@users.sourceforge.net>
7  */
8 
9 #include "Statement.h"
10 
11 #include <stdio.h>
12 
13 
14 Statement::Statement()
15 	: fType(kUnknown)
16 	, fKeyword(NULL)
17 	, fOption(NULL)
18 	, fValue(NULL)
19 	, fChildren(NULL)
20 {
21 }
22 
23 Statement::~Statement()
24 {
25 	delete fKeyword;
26 	delete fOption;
27 	delete fValue;
28 	delete fChildren;
29 }
30 
31 void Statement::SetType(Type type)
32 {
33 	fType = type;
34 }
35 
36 Statement::Type Statement::GetType()
37 {
38 	return fType;
39 }
40 
41 void Statement::SetKeyword(BString* keyword)
42 {
43 	fKeyword = keyword;
44 }
45 
46 BString* Statement::GetKeyword()
47 {
48 	return fKeyword;
49 }
50 
51 void Statement::SetOption(Value* option)
52 {
53 	fOption = option;
54 }
55 
56 Value* Statement::GetOption()
57 {
58 	return fOption;
59 }
60 
61 
62 void Statement::SetValue(Value* value)
63 {
64 	fValue = value;
65 }
66 
67 Value* Statement::GetValue()
68 {
69 	return fValue;
70 }
71 
72 StatementList* Statement::GetChildren()
73 {
74 	return fChildren;
75 }
76 
77 void Statement::AddChild(Statement* statement)
78 {
79 	if (fChildren == NULL) {
80 		fChildren = new StatementList(true);
81 	}
82 	fChildren->Add(statement);
83 }
84 
85 const char* Statement::GetKeywordString()
86 {
87 	if (fKeyword != NULL) {
88 		return fKeyword->String();
89 	}
90 	return NULL;
91 }
92 
93 const char* Statement::GetOptionString()
94 {
95 	Value* option = GetOption();
96 	if (option != NULL) {
97 		return option->GetValueString();
98 	}
99 	return NULL;
100 }
101 
102 const char* Statement::GetTranslationString()
103 {
104 	Value* option = GetOption();
105 	if (option != NULL) {
106 		return option->GetTranslationString();
107 	}
108 	return NULL;
109 }
110 
111 const char* Statement::GetValueString()
112 {
113 	Value* value = GetValue();
114 	if (value != NULL) {
115 		return value->GetValueString();
116 	}
117 	return NULL;
118 }
119 
120 const char* Statement::GetValueTranslationString()
121 {
122 	Value* value = GetValue();
123 	if (value != NULL) {
124 		return value->GetTranslationString();
125 	}
126 	return NULL;
127 }
128 
129 
130 const char* Statement::ElementForType() {
131 	switch (fType) {
132 		case kDefault: return "Default";
133 			break;
134 		case kParam:   return "Param";
135 			break;
136 		case kQuery:   return "Query";
137 			break;
138 		case kValue:   return "Value";
139 			break;
140 		case kUnknown: return "Unknown";
141 			break;
142 	}
143 	return NULL;
144 }
145 
146 void Statement::Print()
147 {
148 	bool hasValue = fValue != NULL;
149 	bool hasOption = fOption != NULL;
150 
151 	printf("<%s", ElementForType());
152 
153 	if (fKeyword != NULL) {
154 		printf(" keyword=\"%s\"", fKeyword->String());
155 	}
156 
157 	if (hasValue || hasOption) {
158 		printf(">\n");
159 	} else {
160 		printf("/>\n");
161 	}
162 
163 
164 	if (hasOption) {
165 		printf("\t<option>\n");
166 		fOption->Print();
167 		printf("\t</option>\n");
168 	}
169 
170 
171 	if (hasValue) {
172 		printf("\t<value>\n");
173 		fValue->Print();
174 		printf("\t</value>\n");
175 	}
176 
177 	if (GetChildren() != NULL) {
178 		printf("\t<children>\n");
179 		GetChildren()->Print();
180 		printf("\t</children>\n");
181 	}
182 
183 	if (hasValue || hasOption) {
184 		printf("</%s>\n\n", ElementForType());
185 	}
186 }
187 
188