OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimFgdcFileWriter.cpp
Go to the documentation of this file.
1 //----------------------------------------------------------------------------
2 // Copyright (c) 2005, David Burken, all rights reserved.
3 //
4 // License: LGPL
5 //
6 // See LICENSE.txt file in the top level directory for more details.
7 //
8 // Author: David Burken
9 //
10 // Description: Class to write out meta data in a Federal Geographic Data
11 // Committe (FGDC) format.
12 //
13 //----------------------------------------------------------------------------
14 // $Id: ossimFgdcFileWriter.cpp 21631 2012-09-06 18:10:55Z dburken $
15 
16 
19 #include <ossim/base/ossimTrace.h>
27 #include <fstream>
28 using namespace std;
29 
31 
32 static ossimTrace traceDebug("ossimFgdcFileWriter:debug");
33 
34 
36  :
37  theIndentionLevel(0),
38  theTabString("\t"),
39  theTemplate(),
40  theSourceImageFilename()
41 {
42 }
43 
45 {
46 }
47 
49 {
51  {
53  << "ossimFgdcFileWriter::writeFile no filename set!" << endl;
54  return false;
55  }
56 
57  if( !theInputConnection )
58  {
60  << "ossimFgdcFileWriter::writeFile no input connection!" << endl;
61  return false;
62  }
63 
65  if (!os)
66  {
68  << "ossimFgdcFileWriter::writeFile no input connection!" << endl;
69  return false;
70  }
71 
72  // Get the geometry from the input.
73  ossimMapProjection* mapProj = 0;
75  if ( inputGeom.valid() ) mapProj = PTR_CAST(ossimMapProjection, inputGeom->getProjection());
76  if (!mapProj)
77  {
79  << "ossimFgdcFileWriter::writeFile Not map projected."
80  << endl;
81  return false;
82  }
83 
85 
86  os << "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n"
87  << "<?xml-stylesheet type=\"text/xsl\" href=\"/common/fgdc_classic.xsl\" ?>\n";
88  openTag(os, ossimString("metadata"), true);
89  openTag(os, ossimString("idinfo"), true);
90  openTag(os, ossimString("citation"), true);
91  openTag(os, ossimString("citeinfo"), true);
92 
93  openTag(os, ossimString("origin"), false);
94  os << find(ossimString("/metadata/idinfo/citation/citeinfo/origin"));
95  closeTag(os, ossimString("origin"), false);
96 
97  openTag(os, ossimString("pubdate"), false);
98  os << find(ossimString("/metadata/idinfo/citation/citeinfo/pubdate"));
99  closeTag(os, ossimString("pubdate"), false);
100 
101  openTag(os, ossimString("title"), false);
102  // os << find(ossimString("/metadata/idinfo/citation/citeinfo/title"));
104  closeTag(os, ossimString("title"), false);
105 
106  openTag(os, ossimString("edition"), false);
107  os << find(ossimString("/metadata/idinfo/citation/citeinfo/edition"));
108  closeTag(os, ossimString("edition"), false);
109 
110  openTag(os, ossimString("geoform"), false);
111  os << find(ossimString("/metadata/idinfo/citation/citeinfo/geoform"));
112  closeTag(os, ossimString("geoform"), false);
113 
114  openTag(os, ossimString("serinfo"), true);
115  openTag(os, ossimString("sername"), false);
116  os << find(ossimString("/metadata/idinfo/citation/citeinfo/serinfo/sername"));
117  closeTag(os, ossimString("sername"), false);
118 
119  openTag(os, ossimString("issue"), false);
121  closeTag(os, ossimString("issue"), false);
122 
123  closeTag(os, ossimString("serinfo"), true);
124 
125  openTag(os, ossimString("pubinfo"), true);
126 
127  openTag(os, ossimString("pubplace"), false);
128  os << find(ossimString("/metadata/idinfo/citation/citeinfo/pubinfo/pubplace"));
129  closeTag(os, ossimString("pubplace"), false);
130 
131  openTag(os, ossimString("publish"), false);
132  os << find(ossimString("/metadata/idinfo/citation/citeinfo/pubinfo/publish"));
133  closeTag(os, ossimString("publish"), false);
134 
135  closeTag(os, ossimString("pubinfo"), true);
136  closeTag(os, ossimString("citeinfo"), true);
137  closeTag(os, ossimString("citation"), true);
138 
139  openTag(os, ossimString("descript"), true);
140 
141  openTag(os, ossimString("abstract"), false);
142  os << find(ossimString("/metadata/idinfo/descript/abstract"));
143  closeTag(os, ossimString("abstract"), false);
144 
145  openTag(os, ossimString("purpose"), false);
146  os << find(ossimString("/metadata/idinfo/descript/purpose"));
147  closeTag(os, ossimString("purpose"), false);
148 
149  openTag(os, ossimString("supplinf"), false);
150  os << find(ossimString("/metadata/idinfo/descript/supplinf"));
151  closeTag(os, ossimString("supplinf"), false);
152 
153  closeTag(os, ossimString("descript"), true);
154 
155  openTag(os, ossimString("timeperd"), true);
156  openTag(os, ossimString("timeinfo"), true);
157  openTag(os, ossimString("sngdate"), true);
158 
159  openTag(os, ossimString("caldate"), false);
160  os << find(ossimString("/metadata/idinfo/timeperd/timeinfo/sngdate/caldate"));
161  closeTag(os, ossimString("caldate"), false);
162 
163  closeTag(os, ossimString("sngdate"), true);
164  closeTag(os, ossimString("timeinfo"), true);
165 
166 
167  openTag(os, ossimString("current"), false);
168  os << find(ossimString("/metadata/idinfo/timeperd/current"));
169  closeTag(os, ossimString("current"), false);
170 
171  closeTag(os, ossimString("timeperd"), true);
172 
173  openTag(os, ossimString("status"), true);
174 
175  openTag(os, ossimString("progress"), false);
176  os << find(ossimString("/metadata/idinfo/status/progress"));
177  closeTag(os, ossimString("progress"), false);
178 
179  openTag(os, ossimString("update"), false);
180  os << find(ossimString("/metadata/idinfo/status/update"));
181  closeTag(os, ossimString("update"), false);
182 
183  closeTag(os, ossimString("status"), true);
184 
185  openTag(os, ossimString("spdom"), true);
186  openTag(os, ossimString("bounding"), true);
187 
188  if (mapProj->isGeographic())
189  {
190  openTag(os, ossimString("westbc"), false);
191  os << ossimString::toString(mpi.ulGroundPt().lon);
192  closeTag(os, ossimString("westbc"), false);
193 
194  openTag(os, ossimString("eastbc"), false);
195  os << ossimString::toString(mpi.lrGroundPt().lon);
196  closeTag(os, ossimString("eastbc"), false);
197 
198  openTag(os, ossimString("northbc"), false);
199  os << ossimString::toString(mpi.ulGroundPt().lat);
200  closeTag(os, ossimString("northbc"), false);
201 
202  openTag(os, ossimString("southbc"), false);
203  os << ossimString::toString(mpi.lrGroundPt().lat);
204  closeTag(os, ossimString("southbc"), false);
205  }
206  else
207  {
208  openTag(os, ossimString("westbc"), false);
209  os << ossimString::toString(mpi.ulEastingNorthingPt().x);
210  closeTag(os, ossimString("westbc"), false);
211 
212  openTag(os, ossimString("eastbc"), false);
213  os << ossimString::toString(mpi.lrEastingNorthingPt().x);
214  closeTag(os, ossimString("eastbc"), false);
215 
216  openTag(os, ossimString("northbc"), false);
217  os << ossimString::toString(mpi.ulEastingNorthingPt().y);
218  closeTag(os, ossimString("northbc"), false);
219 
220  openTag(os, ossimString("southbc"), false);
221  os << ossimString::toString(mpi.ulEastingNorthingPt().y);
222  closeTag(os, ossimString("southbc"), false);
223  }
224 
225  closeTag(os, ossimString("bounding"), true);
226  closeTag(os, ossimString("spdom"), true);
227 
228  openTag(os, ossimString("keywords"), true);
229 
230  openTag(os, ossimString("theme"), true);
231 
232  openTag(os, ossimString("themekt"), false);
233  os << find(ossimString("/metadata/idinfo/keywords/theme/themekt"));
234  closeTag(os, ossimString("themekt"), false);
235 
236  openTag(os, ossimString("themekey"), false);
237  os << find(ossimString("/metadata/idinfo/keywords/theme/themekey"));
238  closeTag(os, ossimString("themekey"), false);
239 
240  closeTag(os, ossimString("theme"), true);
241 
242  closeTag(os, ossimString("keywords"), true);
243 
244  openTag(os, ossimString("accconst"), false);
245  os << find(ossimString("/metadata/idinfo/accconst"));
246  closeTag(os, ossimString("accconst"), false);
247 
248  openTag(os, ossimString("useconst"), false);
249  os << find(ossimString("/metadata/idinfo/useconst"));
250  closeTag(os, ossimString("useconst"), false);
251 
252  openTag(os, ossimString("ptcontac"), true);
253 
254  openTag(os, ossimString("cntinfo"), true);
255 
256  openTag(os, ossimString("cntperp"), true);
257  openTag(os, ossimString("cntper"), false);
258  os << find(ossimString("/metadata/idinfo/ptcontac/cntinfo/cntperp/cntper"));
259  closeTag(os, ossimString("cntper"), false);
260  closeTag(os, ossimString("cntperp"), true);
261 
262  openTag(os, ossimString("cntaddr"), true);
263 
264  openTag(os, ossimString("addrtype"), false);
265  os << find(ossimString("/metadata/idinfo/ptcontac/cntinfo/cntaddr/addrtype"));
266  closeTag(os, ossimString("addrtype"), false);
267 
268  openTag(os, ossimString("address"), false);
269  os << find(ossimString("/metadata/idinfo/ptcontac/cntinfo/cntaddr/address"));
270  closeTag(os, ossimString("address"), false);
271 
272  openTag(os, ossimString("city"), false);
273  os << find(ossimString("/metadata/idinfo/ptcontac/cntinfo/cntaddr/city"));
274  closeTag(os, ossimString("city"), false);
275 
276  openTag(os, ossimString("state"), false);
277  os << find(ossimString("/metadata/idinfo/ptcontac/cntinfo/cntaddr/state"));
278  closeTag(os, ossimString("state"), false);
279 
280  openTag(os, ossimString("postal"), false);
281  os << find(ossimString("/metadata/idinfo/ptcontac/cntinfo/cntaddr/postal"));
282  closeTag(os, ossimString("postal"), false);
283 
284  openTag(os, ossimString("country"), false);
285  os << find(ossimString("/metadata/idinfo/ptcontac/cntinfo/cntaddr/country"));
286  closeTag(os, ossimString("country"), false);
287 
288  closeTag(os, ossimString("cntaddr"), true);
289 
290  openTag(os, ossimString("cntvoice"), false);
291  os << find(ossimString("/metadata/idinfo/ptcontac/cntinfo/cntvoice"));
292  closeTag(os, ossimString("cntvoice"), false);
293 
294  openTag(os, ossimString("cntfax"), false);
295 
296  os << find(ossimString("/metadata/idinfo/ptcontac/cntinfo/cntfax"));
297  closeTag(os, ossimString("cntfax"), false);
298 
299  openTag(os, ossimString("cntemail"), false);
300  os << find(ossimString("/metadata/idinfo/ptcontac/cntinfo/cntemail"));
301  closeTag(os, ossimString("cntemail"), false);
302 
303  closeTag(os, ossimString("cntinfo"), true);
304  closeTag(os, ossimString("ptcontac"), true);
305 
306  openTag(os, ossimString("secinfo"), true);
307 
308  openTag(os, ossimString("secclass"), false);
309  os << find(ossimString("/metadata/idinfo/secinfo/secclass"));
310  closeTag(os, ossimString("secclass"), false);
311 
312  openTag(os, ossimString("secsys"), false);
313  os << find(ossimString("/metadata/idinfo/secinfo/secsys"));
314  closeTag(os, ossimString("secsys"), false);
315 
316  openTag(os, ossimString("sechandl"), false);
317  os << find(ossimString("/metadata/idinfo/secinfo/sechandl"));
318  closeTag(os, ossimString("sechandl"), false);
319 
320  closeTag(os, ossimString("secinfo"), true);
321  closeTag(os, ossimString("idinfo"), true);
322 
323  openTag(os, ossimString("distinfo"), true);
324  openTag(os, ossimString("distrib"), true);
325  openTag(os, ossimString("cntinfo"), true);
326  openTag(os, ossimString("cntperp"), true);
327  openTag(os, ossimString("cntper"), false);
328  os << find(ossimString("/metadata/distinfo/distrib/cntinfo/cntperp/cntper"));
329 
330  closeTag(os, ossimString("cntper"), false);
331  closeTag(os, ossimString("cntperp"), true);
332 
333  openTag(os, ossimString("cntaddr"), true);
334 
335  openTag(os, ossimString("addrtype"), false);
336  os << find(ossimString("/metadata/distinfo/distrib/cntinfo/cntaddr/addrtype"));
337  closeTag(os, ossimString("addrtype"), false);
338 
339  openTag(os, ossimString("address"), false);
340  os << find(ossimString("/metadata/distinfo/distrib/cntinfo/cntaddr/address"));
341  closeTag(os, ossimString("address"), false);
342 
343  openTag(os, ossimString("city"), false);
344  os << find(ossimString("/metadata/distinfo/distrib/cntinfo/cntaddr/city"));
345  closeTag(os, ossimString("city"), false);
346 
347  openTag(os, ossimString("state"), false);
348  os << find(ossimString("/metadata/distinfo/distrib/cntinfo/cntaddr/state"));
349  closeTag(os, ossimString("state"), false);
350 
351  openTag(os, ossimString("postal"), false);
352  os << find(ossimString("/metadata/distinfo/distrib/cntinfo/cntaddr/postal"));
353  closeTag(os, ossimString("postal"), false);
354 
355  openTag(os, ossimString("country"), false);
356  os << find(ossimString("/metadata/distinfo/distrib/cntinfo/cntaddr/country"));
357  closeTag(os, ossimString("country"), false);
358 
359  closeTag(os, ossimString("cntaddr"), true);
360 
361  openTag(os, ossimString("cntvoice"), false);
362  os << find(ossimString("/metadata/distinfo/distrib/cntinfo/cntvoice"));
363  closeTag(os, ossimString("cntvoice"), false);
364 
365  openTag(os, ossimString("cntfax"), false);
366  os << find(ossimString("/metadata/distinfo/distrib/cntinfo/cntfax"));
367  closeTag(os, ossimString("cntfax"), false);
368 
369  openTag(os, ossimString("cntemail"), false);
370  os << find(ossimString("/metadata/distinfo/distrib/cntinfo/cntemail"));
371  closeTag(os, ossimString("cntemail"), false);
372 
373  closeTag(os, ossimString("cntinfo"), true);
374  closeTag(os, ossimString("distrib"), true);
375 
376  openTag(os, ossimString("resdesc"), false);
377  os << find(ossimString("/metadata/distinfo/resdesc"));
378  closeTag(os, ossimString("resdesc"), false);
379 
380  openTag(os, ossimString("distliab"), false);
381  os << find(ossimString("/metadata/distinfo/distliab"));
382  closeTag(os, ossimString("distliab"), false);
383 
384  openTag(os, ossimString("stdorder"), true);
385  openTag(os, ossimString("digform"), true);
386  openTag(os, ossimString("digtinfo"), true);
387 
388  openTag(os, ossimString("formname"), false);
389  os << find(ossimString("/metadata/distinfo/stdorder/digform/digtinfo/formname"));
390  closeTag(os, ossimString("formname"), false);
391 
392  closeTag(os, ossimString("digtinfo"), true);
393 
394  openTag(os, ossimString("digtopt"), true);
395  openTag(os, ossimString("onlinopt"), true);
396  openTag(os, ossimString("computer"), true);
397  openTag(os, ossimString("networka"), true);
398 
399  openTag(os, ossimString("networkr"), false);
400  os << find(ossimString("/metadata/distinfo/stdorder/digform/digtopt/onlinopt/computer/networka/networkr"));
401  closeTag(os, ossimString("networkr"), false);
402 
403  closeTag(os, ossimString("networka"), true);
404  closeTag(os, ossimString("computer"), true);
405  closeTag(os, ossimString("onlinopt"), true);
406  closeTag(os, ossimString("digtopt"), true);
407  closeTag(os, ossimString("digform"), true);
408 
409  openTag(os, ossimString("fees"), false);
410  os << find(ossimString("/metadata/distinfo/stdorder/fees"));
411  closeTag(os, ossimString("fees"), false);
412 
413  closeTag(os, ossimString("stdorder"), true);
414  closeTag(os, ossimString("distinfo"), true);
415 
416  openTag(os, ossimString("metainfo"), true);
417 
418  openTag(os, ossimString("metd"), false);
419  os << find(ossimString("/metadata/metainfo/metd"));
420  closeTag(os, ossimString("metd"), false);
421 
422  openTag(os, ossimString("metc"), true);
423  openTag(os, ossimString("cntinfo"), true);
424  openTag(os, ossimString("cntperp"), true);
425 
426  openTag(os, ossimString("cntper"), false);
427  os << find(ossimString("/metadata/metainfo/metc/cntinfo/cntperp/cntper"));
428  closeTag(os, ossimString("cntper"), false);
429 
430  closeTag(os, ossimString("cntperp"), true);
431 
432  openTag(os, ossimString("cntaddr"), true);
433 
434  openTag(os, ossimString("addrtype"), false);
435  os << find(ossimString("/metadata/metainfo/metc/cntinfo/cntaddr/addrtype"));
436  closeTag(os, ossimString("addrtype"), false);
437 
438  openTag(os, ossimString("address"), false);
439  os << find(ossimString("/metadata/metainfo/metc/cntinfo/cntaddr/address"));
440  closeTag(os, ossimString("address"), false);
441 
442  openTag(os, ossimString("city"), false);
443  os << find(ossimString("/metadata/metainfo/metc/cntinfo/cntaddr/city"));
444  closeTag(os, ossimString("city"), false);
445 
446  openTag(os, ossimString("state"), false);
447  os << find(ossimString("/metadata/metainfo/metc/cntinfo/cntaddr/state"));
448  closeTag(os, ossimString("state"), false);
449 
450  openTag(os, ossimString("postal"), false);
451  os << find(ossimString("/metadata/metainfo/metc/cntinfo/cntaddr/postal"));
452  closeTag(os, ossimString("postal"), false);
453 
454  openTag(os, ossimString("country"), false);
455  os << find(ossimString("/metadata/metainfo/metc/cntinfo/cntaddr/country"));
456  closeTag(os, ossimString("country"), false);
457 
458  closeTag(os, ossimString("cntaddr"), true);
459 
460  openTag(os, ossimString("cntvoice"), false);
461  os << find(ossimString("/metadata/metainfo/metc/cntinfo/cntvoice"));
462  closeTag(os, ossimString("cntvoice"), false);
463 
464  openTag(os, ossimString("cntfax"), false);
465  os << find(ossimString("/metadata/metainfo/metc/cntinfo/cntfax"));
466  closeTag(os, ossimString("cntfax"), false);
467 
468  openTag(os, ossimString("cntemail"), false);
469  os << find(ossimString("/metadata/metainfo/metc/cntinfo/cntemail"));
470  closeTag(os, ossimString("cntemail"), false);
471 
472  closeTag(os, ossimString("cntinfo"), true);
473  closeTag(os, ossimString("metc"), true);
474 
475  openTag(os, ossimString("metstdn"), false);
476  os << find(ossimString("/metadata/metainfo/metstdn"));
477  closeTag(os, ossimString("metstdn"), false);
478 
479  openTag(os, ossimString("metstdv"), false);
480  os << find(ossimString("/metadata/metainfo/metstdv"));
481  closeTag(os, ossimString("metstdv"), false);
482 
483  closeTag(os, ossimString("metainfo"), true);
484  closeTag(os, ossimString("metadata"), true);
485 
486  os.close();
487 
488  return true;
489 }
490 
492 {
493  ofstream os(file.c_str());
494  if (!os)
495  {
497  << "ossimFgdcFileWriter::writeTemplate Could not open: " << file
498  << endl;
499  return false;
500  }
501 
502  os << "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n"
503  << "<?xml-stylesheet type=\"text/xsl\" href=\"/common/fgdc_classic.xsl\" ?>\n";
504  openTag(os, ossimString("metadata"), true);
505  openTag(os, ossimString("idinfo"), true);
506  openTag(os, ossimString("citation"), true);
507  openTag(os, ossimString("citeinfo"), true);
508 
509  openTag(os, ossimString("origin"), false);
510  closeTag(os, ossimString("origin"), false);
511 
512  openTag(os, ossimString("pubdate"), false);
513  closeTag(os, ossimString("pubdate"), false);
514 
515  openTag(os, ossimString("title"), false);
516  closeTag(os, ossimString("title"), false);
517 
518  openTag(os, ossimString("edition"), false);
519  closeTag(os, ossimString("edition"), false);
520 
521  openTag(os, ossimString("geoform"), false);
522  closeTag(os, ossimString("geoform"), false);
523 
524  openTag(os, ossimString("serinfo"), true);
525  openTag(os, ossimString("sername"), false);
526 
527  closeTag(os, ossimString("sername"), false);
528 
529  openTag(os, ossimString("issue"), false);
530  closeTag(os, ossimString("issue"), false);
531 
532  closeTag(os, ossimString("serinfo"), true);
533 
534  openTag(os, ossimString("pubinfo"), true);
535 
536  openTag(os, ossimString("pubplace"), false);
537 
538  closeTag(os, ossimString("pubplace"), false);
539 
540  openTag(os, ossimString("publish"), false);
541  closeTag(os, ossimString("publish"), false);
542 
543  closeTag(os, ossimString("pubinfo"), true);
544  closeTag(os, ossimString("citeinfo"), true);
545  closeTag(os, ossimString("citation"), true);
546 
547  openTag(os, ossimString("descript"), true);
548 
549  openTag(os, ossimString("abstract"), false);
550  closeTag(os, ossimString("abstract"), false);
551 
552  openTag(os, ossimString("purpose"), false);
553  closeTag(os, ossimString("purpose"), false);
554 
555  openTag(os, ossimString("supplinf"), false);
556  closeTag(os, ossimString("supplinf"), false);
557 
558  closeTag(os, ossimString("descript"), true);
559 
560  openTag(os, ossimString("timeperd"), true);
561  openTag(os, ossimString("timeinfo"), true);
562  openTag(os, ossimString("sngdate"), true);
563 
564  openTag(os, ossimString("caldate"), false);
565  closeTag(os, ossimString("caldate"), false);
566 
567  closeTag(os, ossimString("sngdate"), true);
568  closeTag(os, ossimString("timeinfo"), true);
569 
570 
571  openTag(os, ossimString("current"), false);
572  closeTag(os, ossimString("current"), false);
573 
574  closeTag(os, ossimString("timeperd"), true);
575 
576  openTag(os, ossimString("status"), true);
577 
578  openTag(os, ossimString("progress"), false);
579  closeTag(os, ossimString("progress"), false);
580 
581  openTag(os, ossimString("update"), false);
582  closeTag(os, ossimString("update"), false);
583 
584  closeTag(os, ossimString("status"), true);
585 
586  openTag(os, ossimString("spdom"), true);
587  openTag(os, ossimString("bounding"), true);
588 
589  openTag(os, ossimString("westbc"), false);
590  closeTag(os, ossimString("westbc"), false);
591  openTag(os, ossimString("eastbc"), false);
592 
593  closeTag(os, ossimString("eastbc"), false);
594  openTag(os, ossimString("northbc"), false);
595 
596  closeTag(os, ossimString("northbc"), false);
597  openTag(os, ossimString("southbc"), false);
598 
599  closeTag(os, ossimString("southbc"), false);
600 
601  closeTag(os, ossimString("bounding"), true);
602  closeTag(os, ossimString("spdom"), true);
603 
604  openTag(os, ossimString("keywords"), true);
605 
606  openTag(os, ossimString("theme"), true);
607 
608  openTag(os, ossimString("themekt"), false);
609  closeTag(os, ossimString("themekt"), false);
610 
611  openTag(os, ossimString("themekey"), false);
612  closeTag(os, ossimString("themekey"), false);
613 
614  closeTag(os, ossimString("theme"), true);
615 
616  closeTag(os, ossimString("keywords"), true);
617 
618  openTag(os, ossimString("accconst"), false);
619  closeTag(os, ossimString("accconst"), false);
620 
621  openTag(os, ossimString("useconst"), false);
622  closeTag(os, ossimString("useconst"), false);
623 
624  openTag(os, ossimString("ptcontac"), true);
625 
626  openTag(os, ossimString("cntinfo"), true);
627 
628  openTag(os, ossimString("cntperp"), true);
629  openTag(os, ossimString("cntper"), false);
630  closeTag(os, ossimString("cntper"), false);
631  closeTag(os, ossimString("cntperp"), true);
632 
633  openTag(os, ossimString("cntaddr"), true);
634 
635  openTag(os, ossimString("addrtype"), false);
636  closeTag(os, ossimString("addrtype"), false);
637 
638  openTag(os, ossimString("address"), false);
639  closeTag(os, ossimString("address"), false);
640 
641  openTag(os, ossimString("city"), false);
642  closeTag(os, ossimString("city"), false);
643 
644  openTag(os, ossimString("state"), false);
645  closeTag(os, ossimString("state"), false);
646 
647  openTag(os, ossimString("postal"), false);
648  closeTag(os, ossimString("postal"), false);
649 
650  openTag(os, ossimString("country"), false);
651  closeTag(os, ossimString("country"), false);
652 
653  closeTag(os, ossimString("cntaddr"), true);
654 
655  openTag(os, ossimString("cntvoice"), false);
656  closeTag(os, ossimString("cntvoice"), false);
657 
658  openTag(os, ossimString("cntfax"), false);
659  closeTag(os, ossimString("cntfax"), false);
660 
661  openTag(os, ossimString("cntemail"), false);
662  closeTag(os, ossimString("cntemail"), false);
663 
664  closeTag(os, ossimString("cntinfo"), true);
665 
666  closeTag(os, ossimString("ptcontac"), true);
667 
668  openTag(os, ossimString("secinfo"), true);
669  openTag(os, ossimString("secclass"), false);
670  closeTag(os, ossimString("secclass"), false);
671  openTag(os, ossimString("secsys"), false);
672  closeTag(os, ossimString("secsys"), false);
673  openTag(os, ossimString("sechandl"), false);
674  closeTag(os, ossimString("sechandl"), false);
675  closeTag(os, ossimString("secinfo"), true);
676 
677  closeTag(os, ossimString("idinfo"), true);
678 
679  openTag(os, ossimString("distinfo"), true);
680  openTag(os, ossimString("distrib"), true);
681  openTag(os, ossimString("cntinfo"), true);
682  openTag(os, ossimString("cntperp"), true);
683  openTag(os, ossimString("cntper"), false);
684  closeTag(os, ossimString("cntper"), false);
685  closeTag(os, ossimString("cntperp"), true);
686 
687  openTag(os, ossimString("cntaddr"), true);
688 
689  openTag(os, ossimString("addrtype"), false);
690  closeTag(os, ossimString("addrtype"), false);
691 
692  openTag(os, ossimString("address"), false);
693  closeTag(os, ossimString("address"), false);
694 
695  openTag(os, ossimString("city"), false);
696  closeTag(os, ossimString("city"), false);
697 
698  openTag(os, ossimString("state"), false);
699  closeTag(os, ossimString("state"), false);
700 
701  openTag(os, ossimString("postal"), false);
702  closeTag(os, ossimString("postal"), false);
703 
704  openTag(os, ossimString("country"), false);
705  closeTag(os, ossimString("country"), false);
706 
707  closeTag(os, ossimString("cntaddr"), true);
708 
709  openTag(os, ossimString("cntvoice"), false);
710  closeTag(os, ossimString("cntvoice"), false);
711 
712  openTag(os, ossimString("cntfax"), false);
713  closeTag(os, ossimString("cntfax"), false);
714 
715  openTag(os, ossimString("cntemail"), false);
716  closeTag(os, ossimString("cntemail"), false);
717 
718  closeTag(os, ossimString("cntinfo"), true);
719  closeTag(os, ossimString("distrib"), true);
720 
721  openTag(os, ossimString("resdesc"), false);
722  closeTag(os, ossimString("resdesc"), false);
723 
724  openTag(os, ossimString("distliab"), false);
725  closeTag(os, ossimString("distliab"), false);
726 
727  openTag(os, ossimString("stdorder"), true);
728  openTag(os, ossimString("digform"), true);
729  openTag(os, ossimString("digtinfo"), true);
730 
731  openTag(os, ossimString("formname"), false);
732  closeTag(os, ossimString("formname"), false);
733 
734  closeTag(os, ossimString("digtinfo"), true);
735 
736  openTag(os, ossimString("digtopt"), true);
737  openTag(os, ossimString("onlinopt"), true);
738  openTag(os, ossimString("computer"), true);
739  openTag(os, ossimString("networka"), true);
740 
741  openTag(os, ossimString("networkr"), false);
742  closeTag(os, ossimString("networkr"), false);
743 
744  closeTag(os, ossimString("networka"), true);
745  closeTag(os, ossimString("computer"), true);
746  closeTag(os, ossimString("onlinopt"), true);
747  closeTag(os, ossimString("digtopt"), true);
748  closeTag(os, ossimString("digform"), true);
749 
750  openTag(os, ossimString("fees"), false);
751  closeTag(os, ossimString("fees"), false);
752 
753  closeTag(os, ossimString("stdorder"), true);
754  closeTag(os, ossimString("distinfo"), true);
755 
756  openTag(os, ossimString("metainfo"), true);
757 
758  openTag(os, ossimString("metd"), false);
759  closeTag(os, ossimString("metd"), false);
760 
761  openTag(os, ossimString("metc"), true);
762  openTag(os, ossimString("cntinfo"), true);
763  openTag(os, ossimString("cntperp"), true);
764 
765  openTag(os, ossimString("cntper"), false);
766  closeTag(os, ossimString("cntper"), false);
767 
768  closeTag(os, ossimString("cntperp"), true);
769 
770  openTag(os, ossimString("cntaddr"), true);
771 
772  openTag(os, ossimString("addrtype"), false);
773  closeTag(os, ossimString("addrtype"), false);
774 
775  openTag(os, ossimString("address"), false);
776  closeTag(os, ossimString("address"), false);
777 
778  openTag(os, ossimString("city"), false);
779  closeTag(os, ossimString("city"), false);
780 
781  openTag(os, ossimString("state"), false);
782  closeTag(os, ossimString("state"), false);
783 
784  openTag(os, ossimString("postal"), false);
785  closeTag(os, ossimString("postal"), false);
786 
787  openTag(os, ossimString("country"), false);
788  closeTag(os, ossimString("country"), false);
789 
790  closeTag(os, ossimString("cntaddr"), true);
791 
792  openTag(os, ossimString("cntvoice"), false);
793  closeTag(os, ossimString("cntvoice"), false);
794 
795  openTag(os, ossimString("cntfax"), false);
796  closeTag(os, ossimString("cntfax"), false);
797 
798  openTag(os, ossimString("cntemail"), false);
799  closeTag(os, ossimString("cntemail"), false);
800 
801  closeTag(os, ossimString("cntinfo"), true);
802  closeTag(os, ossimString("metc"), true);
803 
804  openTag(os, ossimString("metstdn"), false);
805  closeTag(os, ossimString("metstdn"), false);
806 
807  openTag(os, ossimString("metstdv"), false);
808  closeTag(os, ossimString("metstdv"), false);
809 
810  closeTag(os, ossimString("metainfo"), true);
811  closeTag(os, ossimString("metadata"), true);
812 
813  os.close();
814 
815  if(traceDebug())
816  {
818  << "Wrote file: " << file.c_str() << endl;
819  }
820 
821  return true;
822 }
823 
825  const char* prefix)
826 {
827  const char* lookup = kwl.find(prefix, "template");
828  if (lookup)
829  {
830  setTemplate(ossimFilename(lookup));
831  }
832  lookup = kwl.find(prefix, "source_image_filename");
833  if (lookup)
834  {
835  theSourceImageFilename = lookup;
836  }
837  lookup = kwl.find(prefix, "tab_string");
838  if (lookup)
839  {
840  theTabString = lookup;
841  }
842  lookup = kwl.find(prefix, "fgdc_template_doc");
843  if (lookup)
844  {
845  setTemplate(ossimFilename(lookup));
846  }
847 
848  return ossimMetadataFileWriter::loadState(kwl, prefix);
849 }
850 
852 {
853  return theIndentionLevel;
854 }
855 
857 {
858  theIndentionLevel = level;
859 }
860 
862 {
863  return theTabString;
864 }
865 
867 {
868  theTabString = tabString;
869 }
870 
872  const ossimString& tag,
873  bool newLine) const
874 {
876  {
877  ossimString tab;
878  for (ossim_uint32 i = 0; i < theIndentionLevel; ++i)
879  {
880  tab += theTabString;
881  }
882 
883  os << tab.c_str();
884  }
885 
886  os << "<" << tag.c_str() << ">";
887 
888  if (newLine)
889  {
890  os << "\n";
892  }
893 }
894 
896  const ossimString& tag,
897  bool decrementLevel) const
898 {
899  if ( decrementLevel && (theIndentionLevel > 1) && theTabString.size() )
900  {
901  ossimString tab;
902  for (ossim_uint32 i = 0; i < theIndentionLevel-1; ++i)
903  {
904  tab += theTabString;
905  }
906 
907  os << tab.c_str();
908  }
909 
910  os << "</" << tag.c_str() << ">\n";
911 
912  if (theIndentionLevel && decrementLevel)
913  {
915  }
916 }
917 
919 {
920  theTemplate.openFile(xmlTemplateFile);
921 }
922 
924 {
925  ossimString result;
926 
928  {
929  return result;
930  }
931 
932  vector< ossimRefPtr<ossimXmlNode> > xml_nodes;
933  theTemplate.findNodes(xpath, xml_nodes);
934 
935  if (xml_nodes.size())
936  {
937  if (xml_nodes[0].valid())
938  {
939  result = xml_nodes[0]->getText();
940  }
941  }
942  return result;
943 }
944 
946  std::vector<ossimString>& metadatatypeList) const
947 {
948  metadatatypeList.push_back(ossimString("ossim_fgdc"));
949 }
950 
952  const ossimString& metadataType)const
953 {
954  return (metadataType == "ossim_fgdc");
955 }
ossimString getTabString() const
ossimXmlDocument theTemplate
virtual ossimIrect getBoundingRect(ossim_uint32 resLevel=0) const
This will return the bounding rect of the source.
static const ossimFilename NIL
This was taken from Wx widgets for performing touch and access date stamps.
Definition: ossimFilename.h:40
ossimString find(const ossimString &xpath) const
Represents serializable keyword/value map.
bool valid() const
Definition: ossimRefPtr.h:75
const char * find(const char *key) const
ossim_uint32 theIndentionLevel
Class to write out meta data in a Federal Geographic Data Committe (FGDC) format. ...
static ossimString toString(bool aValue)
Numeric to string methods.
virtual bool isGeographic() const
void setTemplate(const ossimFilename &xmlTemplateFile)
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
Load state method:
void setIndentionLevel(ossim_uint32 level)
Sets the current indentation level.
ossim_uint32 getIndentionLevel() const
bool openFile(const ossimFilename &filename)
ossimMetadataFileWriter
bool writeTemplate(const ossimFilename &file) const
void setTabString(const ossimString &tabString)
Sets the tab string.
std::string::size_type size() const
Definition: ossimString.h:405
unsigned int ossim_uint32
#define PTR_CAST(T, p)
Definition: ossimRtti.h:321
virtual ~ossimFgdcFileWriter()
destructor
virtual ossimRefPtr< ossimImageGeometry > getImageGeometry()
Returns the image geometry object associated with this tile source or NULL if not defined...
virtual bool writeFile()
Writes file to disk.
ossimFgdcFileWriter()
constructor
const ossimProjection * getProjection() const
Access methods for projection (may be NULL pointer).
virtual ossimErrorCode getErrorStatus() const
ossimFilename theSourceImageFilename
const char * c_str() const
Returns a pointer to a null-terminated array of characters representing the string&#39;s contents...
Definition: ossimString.h:396
virtual void getMetadatatypeList(std::vector< ossimString > &metadatatypeList) const
Satisfies pure virtual from ossimMetadataWriter base.
void closeTag(std::ostream &os, const ossimString &tag, bool decrementLevel) const
Closes tag decrementing indentation.
void openTag(std::ostream &os, const ossimString &tag, bool newLine) const
Writes openning tag adding any indentation and brackets.
std::basic_ofstream< char > ofstream
Class for char output file streams.
Definition: ossimIosFwd.h:47
ossimImageSource * theInputConnection
void findNodes(const ossimString &xpath, std::vector< ossimRefPtr< ossimXmlNode > > &nodelist) const
Appends any matching nodes to the list supplied (should be empty):
#define RTTI_DEF1(cls, name, b1)
Definition: ossimRtti.h:485
virtual bool hasMetadataType(const ossimString &metadataType) const
Satisfies pure virtual from ossimMetadataWriter base.
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
std::basic_ostream< char > ostream
Base class for char output streams.
Definition: ossimIosFwd.h:23
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
Method to load the state from a keyword list.