blob: a6a7b751604c011bbe861cf2a4bc616caf270b8a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 CEA LIST.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Created on: 23 nov. 2011
*
* Contributors:
* Arnault Lapitre (CEA LIST) arnault.lapitre@cea.fr
* - Initial API and implementation
******************************************************************************/
#include "avm_uri.h"
#include <fstream>
#include <util/avm_assert.h>
namespace sep
{
/**
* open / close
* OS
*/
bool AvmUri::open()
{
if( outStream.good() )
{
return( true );
}
else switch ( kind )
{
case AVM_URI_STREAM_STD_COUT_KIND:
{
outStream.OS = AVM_OS_COUT.OS;
break;
}
case AVM_URI_STREAM_STD_CERR_KIND:
{
outStream.OS = AVM_OS_CERR.OS;
break;
}
case AVM_URI_STREAM_AVM_LOG_KIND:
{
outStream.OS = AVM_OS_LOG.OS;
break;
}
case AVM_URI_STREAM_AVM_TRACE_KIND:
{
outStream.OS = AVM_OS_TRACE.OS;
break;
}
case AVM_URI_FOLDER_KIND:
{
break;
}
case AVM_URI_FILE_KIND:
case AVM_URI_FILENAME_KIND:
{
if( outStream.fail() )
{
if( outStream.open(location.c_str() , mode) )
{
isAllocated = true;
}
else
{
AVM_OS_FATAL_ERROR_EXIT
<< "Failed to open << " << location
<< " >> file in write mode !!!"
<< SEND_EXIT;
}
}
break;
}
case AVM_URI_SOCKET_KIND:
{
outStream = NULL;
break;
}
case AVM_URI_UNDEFINED_KIND:
{
outStream = NULL;
break;
}
default:
{
outStream = NULL;
break;
}
}
return( true );
}
/**
***************************************************************************
* SERIALIZATION
***************************************************************************
*/
std::string AvmUri::strKind(avm_uri_kind_t kind)
{
switch ( kind )
{
case AVM_URI_STREAM_STD_COUT_KIND : return( "stream:std:cout");
case AVM_URI_STREAM_STD_CERR_KIND : return( "stream:std:cerr");
case AVM_URI_STREAM_AVM_LOG_KIND : return( "stream:avm:log");
case AVM_URI_STREAM_AVM_TRACE_KIND : return( "stream:avm:trace");
case AVM_URI_FOLDER_KIND : return( "folder");
case AVM_URI_FILE_KIND : return( "file");
case AVM_URI_FILENAME_KIND : return( "filename");
case AVM_URI_SOCKET_KIND : return( "socket");
case AVM_URI_UNDEFINED_KIND : return( "undefined<uri#kind>");
default : return( "unknown<uri#kind>" );
}
}
void AvmUri::toStream(OutStream & os) const
{
os << TAB << "uri< " << strKind(kind) << " > {" << EOL;
os << TAB2 << "raw = " << raw << ";" << EOL;
os << TAB2 << "location = " << location << ";" << EOL;
if( kind == AVM_URI_SOCKET_KIND )
{
os << TAB2 << "port = " << port << ";" << EOL;
}
os << TAB << "}" << EOL_FLUSH;
}
} /* namespace sep */