1 #
2 # CDDL HEADER START
3 #
4 # The contents of this file are subject to the terms of the
5 # Common Development and Distribution License (the "License").
6 # You may not use this file except in compliance with the License.
7 #
8 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 # or http://www.opensolaris.org/os/licensing.
10 # See the License for the specific language governing permissions
11 # and limitations under the License.
12 #
13 # When distributing Covered Code, include this CDDL HEADER in each
14 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 # If applicable, add the following below this CDDL HEADER, with the
16 # fields enclosed by brackets "[]" replaced with your own identifying
17 # information: Portions Copyright [yyyy] [name of copyright owner]
18 #
19 # CDDL HEADER END
20 #
21
22 #
23 # Copyright 2008 Sun Microsystems, Inc. All rights reserved.
24 # Use is subject to license terms.
25 #
26
27 #
28 # A number of functions to create each of the different pieces
29 # that will make up a manifest.
30 #
31
32 #
33 # Write the piece out to the xml file
34 #
35 # This recursively works through the piece tree building out the
36 # xml file from the start to the end.
37 #
38 sub write_piece() {
39 my $p = shift;
40
41 $p->write->($p);
42
43 $tablvl++;
44 foreach $ap (@{$p->associations}) {
45 &write_piece($ap);
46 }
47 if (length($p->close) > 0) {
48 printf(TESTXML "%s\n", $p->close);
49 }
50
51 $tablvl--;
52 }
53
54
55 #
56 # Write a service bundle piece
57 #
58 sub write_service_bundle() {
59 my $p = shift;
60
61 printf(TESTXML "<service_bundle ");
62 foreach my $v (@{$p->values}) {
63 printf(TESTXML "%s='%s' ", $v->leftside, $v->rightside);
64 }
65
66 printf(TESTXML ">\n");
67 $p->close("</service_bundle>");
68 }
69
70 #
71 # Write a service piece
72 #
73 sub write_service() {
74 my $p = shift;
75
76 printf(TESTXML "<service ");
77 foreach my $v (@{$p->values}) {
78 printf(TESTXML "%s='%s' ", $v->leftside, $v->rightside);
79 }
80
81 printf(TESTXML ">\n");
82 $p->close("</service>");
83 }
84
85 #
86 # Write an exec_method piece
87 #
88 sub write_exec_method() {
89 my $p = shift;
90
91 printf(TESTXML "<exec_method ");
92 foreach my $v (@{$p->values}) {
93 printf(TESTXML "%s='%s' ", $v->leftside, $v->rightside);
94 }
95
96 printf(TESTXML "/>\n");
97 $p->close("");
98 }
99
100 #
101 # Write a default_instance piece
102 #
103 sub write_create_default_instance() {
104 my $p = shift;
105
106 $v = ${$p->values}[0];
107 printf(TESTXML "<create_default_instance ");
108 printf(TESTXML "enabled='%s' />\n", $v->leftside);
109 $p->close("");
110 }
111
112 #
113 # Write a single instance piece
114 #
115 sub write_single_instance() {
116 my $p = shift;
117
118 printf(TESTXML "<single_instance/>\n");
119 $p->close("");
120 }
121
122 #
123 # Write a restarter piece
124 #
125 sub write_restarter() {
126 my $p = shift;
127
128 printf(TESTXML "<restarter>\n");
129 $p->close("</restarter>");
130
131 }
132
133 #
134 # Write a dependency piece
135 #
136 sub write_dependency() {
137 my $p = shift;
138
139 printf(TESTXML "<dependency ");
140 foreach my $v (@{$p->values}) {
141 printf(TESTXML "%s='%s' ", $v->leftside, $v->rightside);
142 }
143
144 printf(TESTXML ">\n");
145 $p->close("</dependency>");
146 }
147
148 #
149 # Write a dependent piece
150 #
151 sub write_dependent() {
152 my $p = shift;
153
154 printf(TESTXML "<dependent ");
155 foreach my $v (@{$p->values}) {
156 printf(TESTXML "%s='%s' ", $v->leftside, $v->rightside);
157 }
158
159 printf(TESTXML ">\n");
160 $p->close("</dependent>");
161 }
162
163 #
164 # Write a method piece
165 #
166 sub write_method_context() {
167 my $p = shift;
168
169 printf(TESTXML "<method_context>\n");
170 $p->close("</method_context>\n");
171 }
172
173 #
174 # Write a property group piece
175 #
176 sub write_property_group() {
177 my $p = shift;
178
179 printf(TESTXML "<property_group ");
180 foreach my $v (@{$p->values}) {
181 printf(TESTXML "%s='%s' ", $v->leftside, $v->rightside);
182 }
183
184 printf(TESTXML ">\n");
185 $p->close("</property_group>");
186 }
187
188 #
189 # Write a instance piece
190 #
191 sub write_instance() {
192 my $p = shift;
193
194 printf(TESTXML "<instance ");
195 foreach my $v (@{$p->values}) {
196 printf(TESTXML "%s='%s' ", $v->leftside, $v->rightside);
197 }
198
199 printf(TESTXML ">\n");
200 $p->close("</instance>");
201 }
202
203 #
204 # Write a stability piece
205 #
206 sub write_stability() {
207 my $p = shift;
208
209 printf(TESTXML "<instance ");
210 foreach my $v (@{$p->values}) {
211 printf(TESTXML "%s='%s' ", $v->leftside, $v->rightside);
212 }
213
214 printf(TESTXML "/>\n");
215 $p->close("");
216 }
217
218 #
219 # Write a template piece
220 #
221 sub write_template() {
222 my $p = shift;
223
224 printf(TESTXML "<template>\n");
225 $p->close("</template>");
226 }
227
228 #
229 # Write a common_name piece
230 #
231 sub write_common_name() {
232 my $p = shift;
233
234 printf(TESTXML "<common_name>\n");
235 foreach $v (@{$p->values}) {
236 if ($v->leftside eq "lang") {
237 my $lang = $v->rightside;
238 my $cname = "";
239 foreach $vn (@{$p->values}) {
240 if ($vn->leftside eq "${lang}_cname") {
241 $cname = $vn->rightside;
242 last;
243 }
244 }
245
246 if ($cname) {
247 printf(TESTXML "\t<loctext xml:lang='$lang'>\n");
248 printf(TESTXML "\t\t$cname\n");
249 printf(TESTXML "\t</loctext>\n");
250 }
251 }
252 }
253
254 printf(TESTXML "</common_name>\n");
255 }
256
257 #
258 # Write a description piece
259 #
260 sub write_description() {
261 my $p = shift;
262
263 printf(TESTXML "<description>\n");
264 foreach $v (@{$p->values}) {
265 if ($v->leftside eq "lang") {
266 my $lang = $v->rightside;
267 my $cname = "";
268 foreach $vn (@{$p->values}) {
269 if ($vn->leftside eq "${lang}_cname") {
270 $cname = $vn->rightside;
271 last;
272 }
273 }
274
275 if ($cname) {
276 printf(TESTXML "\t<loctext xml:lang='$lang'>\n");
277 printf(TESTXML "\t\t$cname\n");
278 printf(TESTXML "\t</loctext>\n");
279 }
280 }
281 }
282
283 printf(TESTXML "</description>\n");
284 }
285
286 #
287 # Write a documentation piece
288 #
289 sub write_documentation() {
290 my $p = shift;
291
292 printf(TESTXML "<documentation>\n");
293 $p->close("</documentation>");
294 }
295
296 #
297 # Write a pg_pattern piece
298 #
299 sub write_pg_pattern() {
300 my $p = shift;
301
302 printf(TESTXML "<pg_pattern ");
303 foreach my $v (@{$p->values}) {
304 printf(TESTXML "%s='%s' ", $v->leftside, $v->rightside);
305 }
306
307 printf(TESTXML ">\n");
308 $p->close("</pg_pattern>");
309 }
310
311 #
312 # Write a prop_pattern piece
313 #
314 sub write_prop_pattern() {
315 my $p = shift;
316
317 printf(TESTXML "<prop_pattern ");
318 foreach my $v (@{$p->values}) {
319 printf(TESTXML "%s='%s' ", $v->leftside, $v->rightside);
320 }
321
322 printf(TESTXML ">\n");
323 $p->close("</prop_pattern>");
324 }
325
326 #
327 # Write a units piece
328 #
329 sub write_units() {
330 my $p = shift;
331
332 printf(TESTXML "<units>\n");
333 foreach $v (@{$p->values}) {
334 if ($v->leftside eq "lang") {
335 my $lang = $v->rightside;
336 my $cname = "";
337 foreach $vn (@{$p->values}) {
338 if ($vn->leftside eq "${lang}_cname") {
339 $cname = $vn->rightside;
340 last;
341 }
342 }
343
344 if ($cname) {
345 printf(TESTXML "\t<loctext xml:lang='$lang'>\n");
346 printf(TESTXML "\t\t$cname\n");
347 printf(TESTXML "\t</loctext>\n");
348 }
349 }
350 }
351
352 printf(TESTXML "</units>\n");
353 }
354
355 #
356 # Write a visibility piece
357 #
358 sub write_visibility() {
359 my $p = shift;
360
361 printf(TESTXML "<prop_pattern ");
362 foreach my $v (@{$p->values}) {
363 printf(TESTXML "%s='%s' ", $v->leftside, $v->rightside);
364 }
365
366 printf(TESTXML "/>\n");
367 $p->close("");
368 }
369
370 #
371 # Write a cardinality piece
372 #
373 sub write_cardinality() {
374 my $p = shift;
375
376 printf(TESTXML "<cardinality ");
377 foreach my $v (@{$p->values}) {
378 printf(TESTXML "%s='%s' ", $v->leftside, $v->rightside);
379 }
380
381 printf(TESTXML "/>\n");
382 $p->close("");
383 }
384
385 #
386 # Write an internal separators piece
387 #
388 sub write_internal_separators() {
389 printf("write_internal_separators Not yet implemented\n");
390 }
391
392 #
393 # Write a values piece
394 #
395 sub write_values() {
396 my $p = shift;
397
398 printf(TESTXML "<values>");
399 $p->close("</values>");
400 }
401
402 #
403 # Write a constraints piece
404 #
405 sub write_constraints() {
406 my $p = shift;
407
408 printf(TESTXML "<constraints>\n");
409 $p->close("</constraints>");
410 }
411
412 #
413 # Write a choices piece
414 #
415 sub write_choices() {
416 my $p = shift;
417
418 printf(TESTXML "<choices>");
419 $p->close("</choices>");
420 }
421
422 #
423 # Write a value piece
424 #
425 sub write_value() {
426 my $p = shift;
427
428 printf(TESTXML "<value ");
429 foreach my $v (@{$p->values}) {
430 printf(TESTXML "%s='%s' ", $v->leftside, $v->rightside);
431 }
432
433 printf(TESTXML ">\n");
434 $p->close("</value>");
435 }
436
437 #
438 # Write a range piece
439 #
440 sub write_range() {
441 my $p = shift;
442
443 printf(TESTXML "<range ");
444 foreach my $v (@{$p->values}) {
445 printf(TESTXML "%s='%s' ", $v->leftside, $v->rightside);
446 }
447
448 printf(TESTXML "/>\n");
449 $p->close("");
450 }
451
452 #
453 # Write a valueset piece
454 #
455 sub write_valueset() {
456 my $p = shift;
457
458 printf(TESTXML "<valueset ");
459 foreach my $v (@{$p->values}) {
460 printf(TESTXML "%s='%s' ", $v->leftside, $v->rightside);
461 }
462
463 printf(TESTXML "/>\n");
464 $p->close("");
465 }
466
467 #
468 # Write an allvalues piece
469 #
470 sub write_allvalues() {
471 my $p = shift;
472
473 printf(TESTXML "<allvalues ");
474 foreach my $v (@{$p->values}) {
475 printf(TESTXML "%s='%s' ", $v->leftside, $v->rightside);
476 }
477
478 printf(TESTXML "/>\n");
479 $p->close("");
480 }
481
482 #
483 # Write a doc_link piece
484 #
485 sub write_doc_link() {
486 my $p = shift;
487
488 printf(TESTXML "<doc_link");
489 foreach my $v (@{$p->values}) {
490 printf(TESTXML "\n");
491 printf(TESTXML "\t%s='%s'", $v->leftside, $v->rightside);
492 }
493
494 printf(TESTXML "/>\n");
495 $p->close("");
496 }
497
498 #
499 # Write a manpage piece
500 #
501 sub write_manpage() {
502 my $p = shift;
503
504 printf(TESTXML "<manpage ");
505 foreach my $v (@{$p->values}) {
506 printf(TESTXML "%s='%s' ", $v->leftside, $v->rightside);
507 }
508
509 printf(TESTXML "/>\n");
510 $p->close("");
511 }
512
513 #
514 # Write a service fmri piece
515 #
516 sub write_service_fmri() {
517 my $p = shift;
518
519 printf(TESTXML "<service_fmri ");
520 foreach my $v (@{$p->values}) {
521 printf(TESTXML "%s='%s' ", $v->leftside, $v->rightside);
522 }
523
524 printf(TESTXML "/>\n");
525 $p->close("");
526 }
527
528 #
529 # Write a method_propfile piece
530 #
531 sub write_method_profile() {
532 printf("write_method_credential Not yet implemented\n");
533 }
534
535 #
536 # Write a method credential piece
537 #
538 sub write_method_credential() {
539 my $p = shift;
540
541 printf(TESTXML "<method_credential ");
542 foreach my $v (@{$p->values}) {
543 printf(TESTXML "%s='%s' ", $v->leftside, $v->rightside);
544 }
545
546 printf(TESTXML "/>\n");
547 $p->close("");
548 }
549
550 #
551 # Write a method environment piece
552 #
553 sub write_method_environment() {
554 printf("write_mathod_environment Not yet implemented\n");
555 }
556
557 #
558 # Write a propval piece
559 #
560 sub write_propval() {
561 my $p = shift;
562
563 printf(TESTXML "<propval ");
564 foreach my $v (@{$p->values}) {
565 printf(TESTXML "%s='%s' ", $v->leftside, $v->rightside);
566 }
567
568 printf(TESTXML "/>\n");
569 $p->close("");
570 }
571
572 #
573 # Write a property piece
574 #
575 sub write_property() {
576 my $p = shift;
577
578 printf(TESTXML "<property ");
579 foreach my $v (@{$p->values}) {
580 printf(TESTXML "%s='%s' ", $v->leftside, $v->rightside);
581 }
582
583 printf(TESTXML ">\n");
584 $p->close("</property>");
585 }
586
587 #
588 # Write a count list piece
589 #
590 sub write_count_list() {
591 my $p = shift;
592
593 printf(TESTXML "<count_list>\n");
594 foreach my $v (@{$p->values}) {
595 printf(TESTXML "\t<value_node value='%s' />\n", $v->rightside);
596 }
597
598 printf(TESTXML "</count_list>\n");
599 }
600
601 #
602 # Write a integer list piece
603 #
604 sub write_integer_list() {
605 my $p = shift;
606
607 printf(TESTXML "<integer_list>\n");
608 foreach my $v (@{$p->values}) {
609 printf(TESTXML "\t<value_node value='%s' />\n", $v->rightside);
610 }
611
612 printf(TESTXML "</integer_list>\n");
613 }
614
615 #
616 # Write an opaque list piece
617 #
618 sub write_opaque_list() {
619 my $p = shift;
620
621 printf(TESTXML "<opaque_list>\n");
622 foreach my $v (@{$p->values}) {
623 printf(TESTXML "\t<value_node value='%s' />\n", $v->rightside);
624 }
625
626 printf(TESTXML "</opaque_list>\n");
627 }
628
629 #
630 # Write a host list piece
631 #
632 sub write_host_list() {
633 my $p = shift;
634
635 printf(TESTXML "<host_list>\n");
636 foreach my $v (@{$p->values}) {
637 printf(TESTXML "\t<value_node value='%s' />\n", $v->rightside);
638 }
639
640 printf(TESTXML "</host_list>\n");
641 }
642
643 #
644 # Write a hostname list piece
645 #
646 sub write_host_name_list() {
647 my $p = shift;
648
649 printf(TESTXML "<host_name_list>\n");
650 foreach my $v (@{$p->values}) {
651 printf(TESTXML "\t<value_node value='%s' />\n", $v->rightside);
652 }
653
654 printf(TESTXML "</host_name_list>\n");
655 }
656
657 #
658 # Write a netaddress v4 list piece
659 #
660 sub write_net_address_v4_list() {
661 my $p = shift;
662
663 printf(TESTXML "<net_address_v4_list>\n");
664 foreach my $v (@{$p->values}) {
665 printf(TESTXML "\t<value_node value='%s' />\n", $v->rightside);
666 }
667
668 printf(TESTXML "</net_address_v4_list>\n");
669 }
670
671 #
672 # Write a netaddress v6 list piece
673 #
674 sub write_net_address_v6_list() {
675 my $p = shift;
676
677 printf(TESTXML "<net_address_v6_list>\n");
678 foreach my $v (@{$p->values}) {
679 printf(TESTXML "\t<value_node value='%s' />\n", $v->rightside);
680 }
681
682 printf(TESTXML "</net_address_v6_list>\n");
683 }
684
685 #
686 # Write a time list piece
687 #
688 sub write_time_list() {
689 my $p = shift;
690
691 printf(TESTXML "<time_list>\n");
692 foreach my $v (@{$p->values}) {
693 printf(TESTXML "\t<value_node value='%s' />\n", $v->rightside);
694 }
695
696 printf(TESTXML "</time_list>\n");
697 }
698
699 #
700 # Write a astring list piece
701 #
702 sub write_astring_list() {
703 my $p = shift;
704
705 printf(TESTXML "<astring_list>\n");
706 foreach my $v (@{$p->values}) {
707 printf(TESTXML "\t<value_node value='%s' />\n", $v->rightside);
708 }
709
710 printf(TESTXML "</astring_list>\n");
711 $p->close("");
712 }
713
714 #
715 # Write a ustring list piece
716 #
717 sub write_ustring_list() {
718 my $p = shift;
719
720 printf(TESTXML "<ustring_list>\n");
721 foreach my $v (@{$p->values}) {
722 printf(TESTXML "\t<value_node value='%s' />\n", $v->rightside);
723 }
724
725 printf(TESTXML "</ustring_list>\n");
726 }
727
728 #
729 # Write a boolean list piece
730 #
731 sub write_boolean_list() {
732 my $p = shift;
733
734 printf(TESTXML "<boolean_list>\n");
735 foreach my $v (@{$p->values}) {
736 printf(TESTXML "\t<value_node value='%s' />\n", $v->rightside);
737 }
738
739 printf(TESTXML "</boolean_list>\n");
740 }
741
742 #
743 # Write a fmri list piece
744 #
745 sub write_fmri_list() {
746 my $p = shift;
747
748 printf(TESTXML "<fmri_list>\n");
749 foreach my $v (@{$p->values}) {
750 printf(TESTXML "\t<value_node value='%s' />\n", $v->rightside);
751 }
752
753 printf(TESTXML "</fmri_list>\n");
754 }
755
756 #
757 # Write a uri list piece
758 #
759 sub write_uri_list() {
760 my $p = shift;
761
762 printf(TESTXML "<uri_list>\n");
763 foreach my $v (@{$p->values}) {
764 printf(TESTXML "\t<value_node value='%s' />\n", $v->rightside);
765 }
766
767 printf(TESTXML "</uri_list>\n");
768 }
769 return (1);