Ejemplo n.º 1
0
static const String buildSetCommand(const String &command, const Types &...parameters)
{
  String prefix(F("AT+"));
  prefix += command;
  prefix += F("=");
  return prefix + buildParameterList(parameters...);
}
Ejemplo n.º 2
0
static const String buildParameterList(const String &param, const Types &...rest)
{
  return param + F(",") + buildParameterList(rest...);
}
Ejemplo n.º 3
0
int MainWindow::createOceanDataViewFile( QStringList &sl_MetadataList, QStringList &sl_ParameterList, const QString &s_FilenameOut,
                                         const int i_CodecInput, const int i_Env, const int i_DeviceTypeOceanDataView,
                                         const bool b_showShortName, const bool b_showMethod, const bool b_showComment,
                                         const bool b_usePANGAEAQualityFlags, const bool b_setGeocode, const bool b_addLineNo,
                                         const float f_GEOCODE_min, const float f_GEOCODE_max, const QString &s_GEOCODE_min,
                                         const QString &s_GEOCODE_max, const bool b_setGearID, const int i_GearID, const int i_NumOfFiles )
{
    QVector<int>    vi_pos;
    QVector<int>    vi_posQV;
    QVector<int>    vi_SpecialPos;

    int             i_NumOfRemovedLines = 0;
    int             i_NumOfHeaderItems  = 0;

    int             i_GeocodePos        = -1;
    int             i_GearIDPos         = -1;

    int             i_File              = 0;
    int             i_stopFileProgress  = 0;

    int             stopProgress        = 0;
    int             err                 = _NOERROR_;

    int             i                   = 0;
    int             n                   = 0;

    bool            b_containsDOI       = false;

    QString         s_FieldDelimiter    = "\t";
    QString         s_Environment       = "";
    QString         s_DeviceType        = "*";
    QString         s_Output            = "";
    QString         s_FilenameIn        = sl_MetadataList.at( 1 ).section( "\t", _FILENAMEPOS, _FILENAMEPOS );

    QStringList     sld_ParameterList;
    QStringList     sl_Input;
    QStringList     sl_Output;

    QDateTime       dt_GEOCODE_min( QDateTime::fromString( (QString) s_GEOCODE_min, Qt::ISODate ) );
    QDateTime       dt_GEOCODE_max( QDateTime::fromString( (QString) s_GEOCODE_max, Qt::ISODate ) );

//-----------------------------------------------------------------------------------------------------------------------

    if ( sl_ParameterList.count() == 0 )
        return( -60 );

//-----------------------------------------------------------------------------------------------------------------------

    i_NumOfHeaderItems = buildODVHeader( sl_Output, sl_ParameterList, vi_posQV, i_Env, b_showShortName, b_showMethod, b_showComment, b_usePANGAEAQualityFlags );

    if ( i_NumOfHeaderItems < 0 )
        return( i_NumOfHeaderItems ); // return as error, -70 = Latitude/Longitude not given, -71 = Latitude not given, -72 = Longitude not given

//-----------------------------------------------------------------------------------------------------------------------

    QFile ftext( s_FilenameOut );

    if ( ftext.open( QIODevice::WriteOnly | QIODevice::Text) == false )
        return( -20 );

    QTextStream tout( &ftext );

//-----------------------------------------------------------------------------------------------------------------------

    initFileProgress( i_NumOfFiles, s_FilenameIn, tr( "Creating Ocean Data View file..." ) );

//-----------------------------------------------------------------------------------------------------------------------
// write header

    tout << "//<Version>ODV Spreadsheet V4.0</Version>" << endl;
    tout << "//<Creator>" << "</Creator>" << endl;
    tout << "//<CreateTime>" << QDateTime::currentDateTime().toString( "yyyy-MM-ddThh:mm" ) << "</CreateTime>" << endl;
    tout << "//<Software>" << getApplicationName( true ) << " " << _VERSION_ << "</Software>" << endl;
    tout << "//<Source>" << QDir::toNativeSeparators( s_FilenameOut ) << "</Source>" << endl;
    tout << "//<SourceLastModified>" << QDateTime::currentDateTime().toString( "yyyy-MM-ddThh:mm" ) << "</SourceLastModified>" << endl;
    tout << "//<DataField>GeneralField</DataField>" << endl;
    tout << "//<DataType>GeneralType</DataType>" << endl;
    tout << "//" << endl;

//-----------------------------------------------------------------------------------------------------------------------

    i_GeocodePos   = getGeocodePosition( sl_ParameterList, i_Env );
    i_GearIDPos    = getGearIDPosition( sl_ParameterList );
    b_containsDOI  = sl_Output.contains( "DOI:METAVAR:TEXT:51" );

    tout << sl_Output.join( s_FieldDelimiter ) << endl;

//-----------------------------------------------------------------------------------------------------------------------
// find position of date/time parameters

    getSpecialPos( sl_ParameterList, vi_SpecialPos );

//-----------------------------------------------------------------------------------------------------------------------

    s_DeviceType = setDeviceType( i_DeviceTypeOceanDataView );

//-----------------------------------------------------------------------------------------------------------------------

    i_File = 1;

    while ( ( i_File <= i_NumOfFiles ) && ( err == _NOERROR_ ) && ( i_stopFileProgress != _APPBREAK_ ) )
    {
        if ( containsSelectedEnvironment( _SELECTPARAMETER, sl_MetadataList.at( i_File ).section( "\t", _ENVIRONMENTPOS, _ENVIRONMENTPOS ).toInt(), i_Env ) == true )
        {
            s_FilenameIn = sl_MetadataList.at( i_File ).section( "\t", _FILENAMEPOS, _FILENAMEPOS );

            if ( ( n = readFile( s_FilenameIn, sl_Input, i_CodecInput ) ) > 0 )
            {
                i = 0;

                sld_ParameterList.clear();
                vi_pos.clear();

                initProgress( i_NumOfFiles, s_FilenameIn, tr( "Ocean Data View converter is working..." ), n );

                setStatusBarFileInProgress( s_FilenameIn );

//-----------------------------------------------------------------------------------------------------------------------
// read header and find position of parameter

                s_Environment = sl_MetadataList.at( i_File ).section( "\t", _ENVIRONMENTPOS, _ENVIRONMENTPOS ) + _PSEPARATOR_;

                stopProgress = incProgress( i_NumOfFiles, i );

                if ( sl_Input.at( i ).startsWith( "/* DATA DESCRIPTION:" ) == true ) // file starts with PANGAEA header
                {
                    while ( ( i < n ) && ( sl_Input.at( i ).startsWith( "*/" ) == false ) )
                    {
                        if ( sl_Input.at( i ).startsWith( "Parameter(s):" ) == true )
                        {
                            while ( ( i < n ) && ( ( sl_Input.at( i ).startsWith( "Parameter(s):" ) == true ) || ( sl_Input.at( i ).startsWith( "\t" ) == true ) ) )
                            {
                                sld_ParameterList.append( s_Environment + buildParameter( sl_Input.at( i ).section( "\t", 1, 1 ) ) );

                                if ( ++i < n )
                                    stopProgress = incProgress( i_NumOfFiles, i );
                            }
                        }

                        if ( ++i < n )
                            stopProgress = incProgress( i_NumOfFiles, i );
                    }

                    for ( int j=0; j<sl_ParameterList.count(); ++j )
                        vi_pos.append( containsParameter( true, sld_ParameterList, sl_ParameterList.at( j ), b_showShortName, b_showMethod, b_showComment ) );

                    if ( ++i < n )
                        stopProgress = incProgress( i_NumOfFiles, i );
                }
                else
                {
                    sld_ParameterList = buildParameterList( s_Environment, sl_Input.at( i ) );  // not a PANGAEA dataset

                    for ( int j=0; j<sl_ParameterList.count(); ++j )
                        vi_pos.append( containsParameter( false, sld_ParameterList, sl_ParameterList.at( j ), b_showShortName, b_showMethod, b_showComment ) );
                }

//-----------------------------------------------------------------------------------------------------------------------
// write output string

                if ( ( b_setGeocode == true ) || ( b_setGearID == true ) )
                {
                    while ( ( ++i < n ) && ( stopProgress != _APPBREAK_ ) )
                    {
                        sl_Output = buildODVOutputStr( i+1, b_addLineNo, sl_Input.at( i ), sl_MetadataList.at( i_File ), vi_pos, vi_posQV, vi_SpecialPos, b_usePANGAEAQualityFlags, b_containsDOI, s_DeviceType, s_FieldDelimiter );

                        if ( writeDataLine( b_setGeocode, b_setGearID, i_GeocodePos, i_GearIDPos, sl_Output, i_Env, dt_GEOCODE_min, dt_GEOCODE_max, f_GEOCODE_min, f_GEOCODE_max, i_GearID ) == true )
                        {
                            s_Output = sl_Output.join( s_FieldDelimiter );

                            if ( s_Output.contains( "delete line" ) == false )
                                tout << s_Output  << endl;
                            else
                                ++i_NumOfRemovedLines;
                        }

                        stopProgress = incProgress( i_NumOfFiles, i );
                    }
                }
                else
                {
                    while ( ( ++i < n ) && ( stopProgress != _APPBREAK_ ) )
                    {
                        sl_Output = buildODVOutputStr( i+1, b_addLineNo, sl_Input.at( i ), sl_MetadataList.at( i_File ), vi_pos, vi_posQV, vi_SpecialPos, b_usePANGAEAQualityFlags, b_containsDOI, s_DeviceType, s_FieldDelimiter );
                        s_Output  = sl_Output.join( s_FieldDelimiter );

                        if ( s_Output.contains( "delete line" ) == false )
                            tout << s_Output  << endl;
                        else
                            ++i_NumOfRemovedLines;

                        stopProgress = incProgress( i_NumOfFiles, i );
                    }
                }

                resetProgress( i_NumOfFiles );
            }
        }

        i_stopFileProgress = incFileProgress( i_NumOfFiles, i_File++ );
    }

//-----------------------------------------------------------------------------------------------------------------------

    resetFileProgress( i_NumOfFiles );

    ftext.close();

    return( i_NumOfRemovedLines );
}