BESContainer.cc

Go to the documentation of this file.
00001 // BESContainer.cc
00002 
00003 // This file is part of bes, A C++ back-end server implementation framework
00004 // for the OPeNDAP Data Access Protocol.
00005 
00006 // Copyright (c) 2004,2005 University Corporation for Atmospheric Research
00007 // Author: Patrick West <pwest@ucar.edu> and Jose Garcia <jgarcia@ucar.edu>
00008 //
00009 // This library is free software; you can redistribute it and/or
00010 // modify it under the terms of the GNU Lesser General Public
00011 // License as published by the Free Software Foundation; either
00012 // version 2.1 of the License, or (at your option) any later version.
00013 // 
00014 // This library is distributed in the hope that it will be useful,
00015 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00016 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00017 // Lesser General Public License for more details.
00018 // 
00019 // You should have received a copy of the GNU Lesser General Public
00020 // License along with this library; if not, write to the Free Software
00021 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00022 //
00023 // You can contact University Corporation for Atmospheric Research at
00024 // 3080 Center Green Drive, Boulder, CO 80301
00025  
00026 // (c) COPYRIGHT University Corporation for Atmostpheric Research 2004-2005
00027 // Please read the full copyright statement in the file COPYRIGHT_UCAR.
00028 //
00029 // Authors:
00030 //      pwest       Patrick West <pwest@ucar.edu>
00031 //      jgarcia     Jose Garcia <jgarcia@ucar.edu>
00032 
00033 #include <stdio.h>
00034 #include <errno.h>
00035 #include <fstream>
00036 #include <sstream>
00037 
00038 using std::ifstream ;
00039 using std::ofstream ;
00040 using std::ios_base ;
00041 using std::ostringstream ;
00042 
00043 #include "BESContainer.h"
00044 #include "TheBESKeys.h"
00045 #include "BESUncompressManager.h"
00046 #include "BESCache.h"
00047 #include "BESContainerStorageException.h"
00048 
00049 #define BES_POPEN_BUFFER_SIZE 4096
00050 
00051 BESContainer::BESContainer(const string &s)
00052     : _valid( false ),
00053       _real_name( "" ),
00054       _constraint( "" ),
00055       _symbolic_name( s ),
00056       _container_type( "" ),
00057       _attributes( "" )
00058 {
00059 }
00060 
00061 BESContainer::BESContainer( const BESContainer &copy_from )
00062     : _valid( copy_from._valid ),
00063       _real_name( copy_from._real_name ),
00064       _constraint( copy_from._constraint ),
00065       _symbolic_name( copy_from._symbolic_name ),
00066       _container_type( copy_from._container_type ),
00067       _attributes( copy_from._attributes )
00068 {
00069 }
00070 
00071 string
00072 BESContainer::access()
00073 {
00074     // This is easy ... create the cache using the different keys
00075     BESKeys *keys = TheBESKeys::TheKeys() ;
00076     BESCache cache( *keys, "BES.CacheDir", "BES.CachePrefix", "BES.CacheSize" );
00077 
00078     return BESUncompressManager::TheManager()->uncompress( _real_name, cache ) ;
00079 }
00080 
00088 void
00089 BESContainer::dump( ostream &strm ) const
00090 {
00091     strm << BESIndent::LMarg << "BESContainer::dump - ("
00092                              << (void *)this << ")" << endl ;
00093     BESIndent::Indent() ;
00094     strm << BESIndent::LMarg << "is valid: " << _valid << endl ;
00095     strm << BESIndent::LMarg << "symbolic name: " << _symbolic_name << endl ;
00096     strm << BESIndent::LMarg << "real name: " << _real_name << endl ;
00097     strm << BESIndent::LMarg << "data type: " << _container_type << endl ;
00098     strm << BESIndent::LMarg << "constraint: " << _constraint << endl ;
00099     strm << BESIndent::LMarg << "attributes: " << _attributes << endl ;
00100     BESIndent::UnIndent() ;
00101 }
00102 

Generated on Wed Aug 29 03:14:15 2007 for OPeNDAP Back End Server (BES) by  doxygen 1.5.2