OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimNitfFileHeaderV2_1.h
Go to the documentation of this file.
1 //*******************************************************************
2 //
3 // License: MIT
4 //
5 // See LICENSE.txt file in the top level directory for more details.
6 //
7 // Author: Garrett Potts
8 //
9 // Description: Nitf support class
10 //
11 //********************************************************************
12 // $Id$
13 
14 #ifndef ossimNitfFileHeaderV2_1_HEADER
15 #define ossimNitfFileHeaderV2_1_HEADER 1
16 
18 #include <ossim/base/ossimDate.h>
19 #include <ossim/base/ossimIosFwd.h>
21 
23 {
24 public:
26  const ossimNitfImageInfoRecordV2_1 &data);
27 
28  ossim_uint64 getHeaderLength()const;
29  ossim_uint64 getImageLength()const;
30  ossim_uint64 getTotalLength()const;
31 
32  void setSubheaderLength(ossim_uint32 length);
33  void setImageLength(ossim_uint64 length);
34 
38  char theImageSubheaderLength[7];
39 
43  char theImageLength[11];
44 };
45 
46 
48 {
49 public:
51  const ossimNitfGraphicInfoRecordV2_1 &data);
52 
60 
65 };
66 
67 
69 {
70 public:
73 
74 
75  ossim_uint64 getHeaderLength()const;
76  ossim_uint64 getTextLength()const;
77  ossim_uint64 getTotalLength()const;
78 
79  void setSubheaderLength(ossim_uint64 length);
80  void setTextLength(ossim_uint64 length);
81 
85  char theTextFileSubheaderLength[5];
86 
90  char theTextFileLength[6];
91 };
92 
94 {
95 public:
98 
106 
111 };
112 
114 {
115 public:
116  friend std::ostream& operator<<(std::ostream& out,
118 
126 
131 };
132 
134 {
135 public:
136 
138  virtual ~ossimNitfFileHeaderV2_1();
139  virtual void parseStream(ossim::istream& in);
140  virtual void writeStream(ossim::ostream& out);
141  virtual bool isEncrypted()const;
142  virtual ossim_int32 getNumberOfImages()const;
143  virtual ossim_int32 getNumberOfLabels()const;
144  virtual ossim_int32 getNumberOfSymbols()const;
145  virtual ossim_int32 getNumberOfGraphics()const;
146  virtual ossim_int32 getNumberOfTextSegments()const;
149  virtual ossim_int32 getHeaderSize()const;
150  virtual ossim_int64 getFileSize()const;
151  virtual const char* getVersion()const;
152  virtual const char* getDateTime()const;
153  virtual ossimDrect getImageRect()const;
154 
155  virtual void addImageInfoRecord(const ossimNitfImageInfoRecordV2_1& recordInfo);
156  virtual void deleteLastImageInfoRecord();
157  virtual void deleteLastDataExtSegInfoRecord();
158 
159  virtual void addTextInfoRecord(const ossimNitfTextFileInfoRecordV2_1& recordInfo);
160  virtual void addDataExtSegInfoRecord(const ossimNitfDataExtSegInfoRecordV2_1& recordInfo);
161 
162  virtual void replaceImageInfoRecord(int i, const ossimNitfImageInfoRecordV2_1& recordInfo);
163 
165  ossim::istream& in)const;
167  ossim::istream& in)const;
169  ossim::istream& in)const;
171  ossim::istream& in)const;
173  ossim_int32 dataExtNumber, ossim::istream& in)const;
174 
178  virtual ossimNitfTextHeader* allocateTextHeader()const;
180 
181  virtual ossimString getSecurityClassificationSys()const;
182  virtual ossimString getCodeWords()const;
183  virtual ossimString getControlAndHandling()const;
184  virtual ossimString getReleasingInstructions()const;
185  virtual ossimString getDeclassificationType()const;
186  virtual ossimString getDeclassificationDate()const;
187  virtual ossimString getDeclassificationExemption()const;
188  virtual ossimString getDowngrade()const;
189  virtual ossimString getDowngradingDate()const;
190  virtual ossimString getClassificationText()const;
191  virtual ossimString getClassificationAuthorityType()const;
193  virtual ossimString getClassificationReason()const;
194  virtual ossimString getSecuritySourceDate()const;
195  virtual ossimString getSecurityControlNumber()const;
196  virtual void getBackgroundColor(ossim_uint8& r,
197  ossim_uint8& g,
198  ossim_uint8& b)const;
199  virtual ossimString getOriginatorsName()const;
200  virtual ossimString getOriginatorsPhone()const;
201 
202  virtual void setFileLength(ossim_uint64 fileLength);
203  virtual void setHeaderLength(ossim_uint64 headerLength);
204 
205  virtual void setSecurityClassificationSys(const ossimString& value);
206  virtual void setCodeWords(const ossimString& codeWords);
207  virtual void setControlAndHandling(const ossimString& controlAndHandling);
208  virtual void setReleasingInstructions(const ossimString& releasingInstructions);
209  virtual void setDeclassificationType(const ossimString& declassType);
210  virtual void setDeclassificationDate(const ossimLocalTm& declassDate);
211  virtual void setDeclassificationDate(const ossimString& declassDate);
212  virtual void setDeclassificationExemption(const ossimString& exemption);
213  virtual void setDowngrade(const ossimString& downgrade);
214  virtual void setDowngradingDate(const ossimLocalTm& date);
215  virtual void setDowngradingDate(const ossimString& date);
216  virtual void setClassificationText(const ossimString& classificationText);
217  virtual void setClassificationAuthorityType(const ossimString& authorityType);
218  virtual void setClassificationAuthority(const ossimString& authorityType);
219  virtual void setClassificationReason(const ossimString& reason);
220  virtual void setSecuritySourceDate(const ossimLocalTm& date);
221  virtual void setSecuritySourceDate(const ossimString& date);
222  virtual void setSecurityControlNumber(const ossimString& number);
223  virtual void setFileBackgroundColor(ossim_uint8 r,
224  ossim_uint8 g,
225  ossim_uint8 b);
226  virtual void setOriginatorsName(const ossimString& name);
227  virtual void setOriginatorsPhone(const ossimString& phone);
228 
229  virtual void setProperty(ossimRefPtr<ossimProperty> property);
230  virtual ossimRefPtr<ossimProperty> getProperty(const ossimString& name)const;
231  virtual void getPropertyNames(std::vector<ossimString>& propertyNames)const;
235  virtual bool isValid()const;
236 
247  virtual bool loadState(const ossimKeywordlist& kwl,
248  const char* prefix=0);
249 
250  virtual bool saveState(ossimKeywordlist& kwl, const ossimString& prefix="")const;
251 
257  static const ossimString FSCLSY_KW;
258  static const ossimString FSDCTP_KW;
259  static const ossimString FSDCDT_KW;
260  static const ossimString FSDCXM_KW;
261  static const ossimString FSDG_KW;
262  static const ossimString FSDGDT_KW;
263  static const ossimString FSCLTX_KW;
264  static const ossimString FSCATP_KW;
265  static const ossimString FSCRSN_KW;
266  static const ossimString FSSRDT_KW;
267  static const ossimString FBKGC_KW;
268 
269  void clearFields();
270 
271  void addTag(ossimNitfTagInformation tag, bool unique = true);
272  void removeTag(const ossimString& tagName);
273  bool takeOverflowTags(std::vector<ossimNitfTagInformation> &overflowTags,
274  ossim_uint32 potentialDesIndex, bool userDefinedTags = false);
279  virtual std::ostream& print(std::ostream& out,
280  const std::string& prefix=std::string()) const;
281 
282 private:
291  void setNumberOfImageInfoRecords(ossim_uint64 num);
292  void setNumberOfTextInfoRecords(ossim_uint64 num);
293  void setNumberOfGraphicInfoRecords(ossim_uint64 num);
294  void setNumberOfDataExtSegInfoRecords(ossim_uint64 num);
295 
296  void readImageInfoRecords(ossim::istream& in);
297  void readGraphicInfoRecords(ossim::istream& in);
298  void readTextFileInfoRecords(ossim::istream& in);
299  void readDataExtSegInfoRecords(ossim::istream& in);
300  void readResExtSegInfoRecords(ossim::istream& in);
301 
309  void initializeAllOffsets();
310 
315  void readOverflowTags(ossim::istream& in);
316  void readDes(std::istream& in);
317 
318  // Note: these are work variables and not part of the
319  // Nitf header. These variables will be used to quickly
320  // access various parts of the file.
329 
336 
341  std::vector<ossimNitfImageOffsetInformation> theImageOffsetList;
342 
343  std::vector<ossimNitfGraphicOffsetInformation> theGraphicOffsetList;
344  std::vector<ossimNitfTextOffsetInformation> theTextFileOffsetList;
345  std::vector<ossimNitfDataExtSegOffsetInformation> theDataExtSegOffsetList;
346 
347  // START Of header variables
354  char theSecurityClassificationSys[3];
355 
361  char theCodewords[12];
362 
368  char theControlAndHandling[3];
369 
375  char theReleasingInstructions[21];
376 
392  char theDeclassificationType[3];
393 
405  char theDeclassificationDate[9];
406 
412  char theDeclassificationExemption[5];
413 
427  char theDowngrade[2];
428 
435  char theDowngradingDate[9];
436 
442  char theClassificationText[44];
443 
455  char theClassificationAuthorityType[2];
456 
462  char theClassificationAuthority[41];
463 
471  char theClassificationReason[2];
472 
479  char theSecuritySourceDate[9];
480 
486  char theSecurityControlNumber[16];
487 
498  ossim_uint8 theFileBackgroundColor[3];
499 
505  char theOriginatorsName[25];
506 
512  char theOriginatorsPhone[19];
513 
525  char theFileLength[13];
526 
534  char theHeaderLength[7];
535 
542  char theNumberOfImageInfoRecords[4];
543 
549  std::vector<ossimNitfImageInfoRecordV2_1> theNitfImageInfoRecords;
550 
556  char theNumberOfGraphicInfoRecords[4];
557 
562  std::vector<ossimNitfGraphicInfoRecordV2_1> theNitfGraphicInfoRecords;
563 
569  char theReservedForFutureUse1[4];
570 
576  char theNumberOfTextFileInfoRecords[4];
577 
583  std::vector<ossimNitfTextFileInfoRecordV2_1> theNitfTextFileInfoRecords;
584 
590  char theNumberOfDataExtSegInfoRecords[4];
591 
597  std::vector<ossimNitfDataExtSegInfoRecordV2_1> theNitfDataExtSegInfoRecords;
598 
604  char theNumberOfResExtSegInfoRecords[4];
605 
611  std::vector<ossimNitfResExtSegInfoRecordV2_1> theNitfResExtSegInfoRecords;
612 
620  char theUserDefinedHeaderDataLength[6];
621 
627  char theUserDefinedHeaderOverflow[4];
628 
635  char theExtendedHeaderDataLength[6];
636 
644  char theExtendedHeaderDataOverflow[4];
645 
646 TYPE_DATA
647 };
648 
649 #endif
ossimDrect theImageRect
This will be pre-computed when the header file is opened.
virtual const char * getDateTime() const =0
virtual ossimNitfTextHeader * allocateTextHeader() const =0
virtual std::ostream & print(std::ostream &out, const std::string &prefix=std::string()) const
Print method that outputs a key/value type format adding prefix to keys.
virtual void setHeaderLength(ossim_uint64 headerLength)=0
Sets header length (HL) field.
virtual ossimNitfLabelHeader * getNewLabelHeader(ossim_uint32 labelNumber, ossim::istream &in) const =0
virtual const char * getVersion() const =0
#define OSSIMDLLEXPORT
char theResExtSegSubheaderLength[5]
Is a 4 byte numeric 0-9999.
virtual ossimNitfImageHeader * getNewImageHeader(ossim_uint32 imageNumber, ossim::istream &in) const =0
static const ossimString FSDCDT_KW
Represents serializable keyword/value map.
std::vector< ossimNitfGraphicOffsetInformation > theGraphicOffsetList
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
Method to set fields from a keyword list.
virtual ossimRefPtr< ossimProperty > getProperty(const ossimString &name) const
static const ossimString FSCLTX_KW
friend std::ostream & operator<<(std::ostream &out, const ossimNitfResExtSegInfoRecordV2_1 &data)
static const ossimString FBKGC_KW
virtual bool isValid() const
isValid will test if the fields are valid and will return true or false.
char theDataExtSegLength[10]
Is a 9 byte numeric 0-999999999.
std::vector< ossimNitfTextOffsetInformation > theTextFileOffsetList
virtual ossim_int32 getNumberOfLabels() const =0
friend std::ostream & operator<<(std::ostream &out, const ossimNitfDataExtSegInfoRecordV2_1 &data)
static const ossimString FSCATP_KW
virtual ossimNitfSymbolHeader * getNewSymbolHeader(ossim_uint32 symbolNumber, ossim::istream &in) const =0
char theDataExtSegSubheaderLength[5]
Is a 4 byte numeric 200-9999.
virtual ossimString getReleasingInstructions() const =0
std::vector< ossimNitfGraphicInfoRecordV2_1 > theNitfGraphicInfoRecords
This is an optional field and will depend on theNumberOfGraphicInfoRecords.
virtual bool isEncrypted() const =0
virtual void setOriginatorsPhone(const ossimString &origniatorPhone)=0
virtual void setControlAndHandling(const ossimString &controlAndHandling)=0
friend std::ostream & operator<<(std::ostream &out, const ossimNitfGraphicInfoRecordV2_1 &data)
virtual ossimString getSecurityControlNumber() const =0
virtual void setSecurityControlNumber(const ossimString &controlNo)=0
virtual ossim_int32 getNumberOfSymbols() const =0
virtual ossim_int64 getFileSize() const =0
virtual ossimNitfLabelHeader * allocateLabelHeader() const =0
virtual ossimString getOriginatorsName() const =0
ostream & operator<<(ostream &out, const ossimAxes &axes)
Definition: ossimAxes.h:88
static const ossimString FSSRDT_KW
virtual ossimNitfImageHeader * allocateImageHeader() const =0
virtual ossimNitfTextHeader * getNewTextHeader(ossim_uint32 textNumber, ossim::istream &in) const =0
virtual ossim_int32 getNumberOfReservedExtSegments() const =0
virtual ossim_int32 getNumberOfTextSegments() const =0
static const ossimString FSCLSY_KW
Properties of a NITF 2.1 Header file.
#define TYPE_DATA
Definition: ossimRtti.h:339
virtual void removeTag(const ossimString &tagName)
unsigned long long ossim_uint64
char theGraphicSubheaderLength[5]
Is a 4 byte numeric 0258-9999.
unsigned int ossim_uint32
virtual ossim_int32 getNumberOfDataExtSegments() const =0
virtual void setFileLength(ossim_uint64 fileLength)=0
Sets file length (FL) field.
std::vector< ossimNitfDataExtSegInfoRecordV2_1 > theNitfDataExtSegInfoRecords
This information is conditional on the number of info records field.
virtual void parseStream(ossim::istream &in)=0
static const ossimString FSDG_KW
virtual ossim_int32 getHeaderSize() const =0
ossim_uint32 theHeaderSize
This is not part of the NITF file header.
virtual void setCodeWords(const ossimString &codeWords)=0
virtual ossimString getOriginatorsPhone() const =0
virtual void setClassificationAuthority(const ossimString &classAuth)=0
static const ossimString FSCRSN_KW
virtual void setOriginatorsName(const ossimString &originatorName)=0
virtual ossim_int32 getNumberOfGraphics() const =0
char theResExtSegLength[8]
Is a 7 byte numeric 0-9999999.
virtual ossimDrect getImageRect() const =0
std::vector< ossimNitfResExtSegInfoRecordV2_1 > theNitfResExtSegInfoRecords
This information is conditional on the number of Res Ext Seg info records field.
std::vector< ossimNitfImageOffsetInformation > theImageOffsetList
This will hold pre-computed offsets to the start of all image headers and start to their data...
virtual void setReleasingInstructions(const ossimString &releasingInstructions)=0
std::vector< ossimNitfImageInfoRecordV2_1 > theNitfImageInfoRecords
This information is conditional on the number of image info records field.
virtual ossimString getControlAndHandling() const =0
std::basic_istream< char > istream
Base class for char input streams.
Definition: ossimIosFwd.h:20
virtual ossimNitfSymbolHeader * allocateSymbolHeader() const =0
std::vector< ossimNitfDataExtSegOffsetInformation > theDataExtSegOffsetList
static const ossimString FSDGDT_KW
std::vector< ossimNitfTextFileInfoRecordV2_1 > theNitfTextFileInfoRecords
This information is conditional on the number of text file info records field.
virtual ossimString getClassificationAuthority() const =0
char theGraphicLength[7]
Is a 6 byte numeric 0000001-9999999.
long long ossim_int64
virtual ossimNitfDataExtensionSegment * getNewDataExtensionSegment(ossim_int32 dataExtNumber, ossim::istream &in) const =0
virtual ossimNitfDataExtensionSegment * allocateDataExtSegment() const =0
static const ossimString FSDCXM_KW
virtual void writeStream(ossim::ostream &out)=0
virtual ossimString getCodeWords() const =0
static const ossimString FSDCTP_KW
virtual void getPropertyNames(std::vector< ossimString > &propertyNames) const
bool saveState(ossimKeywordlist &kwl, const ossimString &prefix="") const
unsigned char ossim_uint8
virtual void setProperty(ossimRefPtr< ossimProperty > property)
std::basic_ostream< char > ostream
Base class for char output streams.
Definition: ossimIosFwd.h:23
void addTag(const ossimNitfTagInformation &tag, bool unique=true)
int ossim_int32
virtual ossim_int32 getNumberOfImages() const =0