/usr/include/ITK-4.5/itkDOMReader.hxx is in libinsighttoolkit4-dev 4.5.0-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | /*=========================================================================
*
* Copyright Insight Software Consortium
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0.txt
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*=========================================================================*/
#ifndef __itkDOMReader_hxx
#define __itkDOMReader_hxx
#include "itkDOMReader.h"
#include "itksys/SystemTools.hxx"
#include "itkStdStreamLogOutput.h"
namespace itk
{
template< typename TOutput >
DOMReader<TOutput>::DOMReader() : m_Output( NULL )
{
// Create the logger.
this->m_Logger = LoggerType::New();
// by default logged messages go to the console
typename StdStreamLogOutput::Pointer defout = StdStreamLogOutput::New();
defout->SetStream( std::cout );
this->m_Logger->AddLogOutput( defout );
// settings that may be important
this->m_Logger->SetName( this->GetNameOfClass() );
this->m_Logger->SetPriorityLevel( Logger::NOTSET ); // log everything
this->m_Logger->SetLevelForFlushing( Logger::MUSTFLUSH ); // never flush (MUSTFLUSH actually leads to no flush, a bug in Logger)
// some other settings
this->m_Logger->SetTimeStampFormat( Logger::HUMANREADABLE );
this->m_Logger->SetHumanReadableFormat( "%Y-%b-%d %H:%M:%S" ); // time stamp format
}
/**
* The output object will be created automatically, but the user
* can appoint a user object as the output by calling this function.
*/
template< typename TOutput >
void
DOMReader<TOutput>::SetOutput( OutputType* output )
{
this->m_Output = output;
this->m_OutputHolder = dynamic_cast<LightObject*>(output);
this->Modified();
}
/** Get the output object for full access. */
template< typename TOutput >
typename DOMReader<TOutput>::OutputType *
DOMReader<TOutput>::GetOutput()
{
return this->m_Output;
}
/** Get the output object for read-only access. */
template< typename TOutput >
const typename DOMReader<TOutput>::OutputType *
DOMReader<TOutput>::GetOutput() const
{
return this->m_Output;
}
/**
* Function called by Update() or end-users to generate the output object from a DOM object.
* Some derived readers may accept an incomplete DOM object during the reading process, in those cases
* the optional argument 'userdata' can be used to provide the missed information.
*/
template< typename TOutput >
void
DOMReader<TOutput>::Update( const DOMNodeType* inputdom, const void* userdata )
{
if ( inputdom == NULL )
{
itkExceptionMacro( "read from an invalid DOM object" );
}
// group subsequent logging under this reader
this->GetLogger()->SetName( this->GetNameOfClass() );
// variable/info needed for logging
FancyString info;
FancyString tagname = inputdom->GetName();
// log start of reading
info << ClearContent << "Reading \"" << tagname << "\" ...\n";
this->GetLogger()->Info( info );
// perform actual reading
this->GenerateData( inputdom, userdata );
// log end of reading
info << ClearContent << "Reading \"" << tagname << "\" done!\n";
this->GetLogger()->Info( info );
if ( this->GetOutput() == NULL )
{
itkExceptionMacro( "no valid output object was generated" );
}
}
/**
* Function called by end-users to generate the output object from the input XML file.
*/
template< typename TOutput >
void
DOMReader<TOutput>::Update()
{
// create the intermediate DOM object if it is not set
if ( this->m_IntermediateDOM.IsNull() )
{
DOMNodePointer node = DOMNodeType::New();
this->SetIntermediateDOM( node.GetPointer() );
}
FancyString fn( this->m_FileName );
// remove previous data from the DOM object
this->m_IntermediateDOM->RemoveAllAttributesAndChildren();
// read the input XML file and update the DOM object
typename DOMNodeXMLReader::Pointer reader = DOMNodeXMLReader::New();
reader->SetOutput( this->m_IntermediateDOM );
reader->SetFileName( fn );
reader->Update();
// save the current working directory (WD), and change the WD to where the XML file is located
FancyString sOldWorkingDir = itksys::SystemTools::GetCurrentWorkingDirectory();
FancyString sNewWorkingDir = itksys::SystemTools::GetFilenamePath( fn );
itksys::SystemTools::ChangeDirectory( sNewWorkingDir );
this->Update( this->m_IntermediateDOM );
// change the WD back to the previously saved
itksys::SystemTools::ChangeDirectory( sOldWorkingDir );
}
} // namespace itk
#endif // __itkDOMReader_hxx
|