示例#1
0
文件: mime.c 项目: codesun/xetn
const char* Mime_lookupType(const char* path) {
	if(path == NULL) {
		return NULL;
	}
	const char* suf = GetSuffix(path);
	if(suf == NULL) {
		return NULL;
	}
	return HashMap_get(&module.s2t_map, suf);
}
示例#2
0
bool SettingsOutput::LoadSettingsOutputFromMongoDB(int subBasinID)
{
    bson_t *b = bson_new();
    bson_t *child1 = bson_new();
    BSON_APPEND_DOCUMENT_BEGIN(b, "$query", child1);
    bson_append_document_end(b, child1);
    bson_destroy(child1);

    mongoc_cursor_t *cursor;
    const bson_t *bsonTable;
    mongoc_collection_t *collection;

    collection = mongoc_client_get_collection(m_conn, m_dbName.c_str(), DB_TAB_FILEOUT);
    cursor = mongoc_collection_find(collection, MONGOC_QUERY_NONE, 0, 0, 0, b, NULL, NULL);

    bson_iter_t itertor;
    while (mongoc_cursor_more(cursor) && mongoc_cursor_next(cursor, &bsonTable))
    {
        int use = -1;
		string modCls = "", outputID = "", descprition = "";
		string outFileName = "", aggType = "", unit = "", subBsn = "";
		string dataType = "", intervalUnit = "";
		int interval = -1;
		string sTimeStr = "", eTimeStr = "";
        if (bson_iter_init_find(&itertor, bsonTable, Tag_OutputUSE))
            use = GetIntFromBSONITER(&itertor);
        if (bson_iter_init_find(&itertor, bsonTable, Tag_MODCLS))
			modCls = GetStringFromBSONITER(&itertor);
		if (bson_iter_init_find(&itertor, bsonTable, Tag_OutputID))
			outputID = GetStringFromBSONITER(&itertor);
		if (bson_iter_init_find(&itertor, bsonTable, Tag_OutputDESC))
			descprition = GetStringFromBSONITER(&itertor);
		if (bson_iter_init_find(&itertor, bsonTable, Tag_FileName))
			outFileName = GetStringFromBSONITER(&itertor);
		string coreFileName = GetCoreFileName(outFileName);
		string suffix = GetSuffix(outFileName);
		if (bson_iter_init_find(&itertor, bsonTable, Tag_AggType))
			aggType = GetStringFromBSONITER(&itertor);
		if (bson_iter_init_find(&itertor, bsonTable, Tag_OutputUNIT))
			unit = GetStringFromBSONITER(&itertor);
		if (bson_iter_init_find(&itertor, bsonTable, Tag_OutputSubbsn))
			subBsn = GetStringFromBSONITER(&itertor);
		if (bson_iter_init_find(&itertor, bsonTable, Tag_StartTime))
			sTimeStr = GetStringFromBSONITER(&itertor);
		if (bson_iter_init_find(&itertor, bsonTable, Tag_EndTime))
			eTimeStr = GetStringFromBSONITER(&itertor);
		if (bson_iter_init_find(&itertor, bsonTable, Tag_Interval))
			interval = GetIntFromBSONITER(&itertor);
		if (bson_iter_init_find(&itertor, bsonTable, Tag_IntervalUnit))
			intervalUnit = GetStringFromBSONITER(&itertor);
		if(use <= 0)
			continue;
		/// First, if OutputID does not existed in m_printInfos, then create a new one.
		if(m_printInfosMap.find(outputID) == m_printInfosMap.end())
		{
			m_printInfosMap[outputID] = new PrintInfo();
			m_printInfosMap[outputID]->setOutputID(outputID);/// set the OUTPUTID for the new PrintInfo
		}
		PrintInfo *pi = NULL; /// reset the pointer
		pi = m_printInfosMap[outputID];

		ostringstream oss;
		oss << subBasinID << "_";
		string strSubbasinID = oss.str();
		bool isRaster = false;
		string gtiff(GTiffExtension);
		if (gtiff.find(suffix) != gtiff.npos)
			isRaster = true;
		/// Check Tag_OutputSubbsn first
		if (StringMatch(subBsn, Tag_Outlet)) /// Output of outlet, such as Qoutlet, SEDoutlet, etc.
		{
			pi->setInterval(interval);
			pi->setIntervalUnits(intervalUnit);
			pi->AddPrintItem(sTimeStr, eTimeStr, strSubbasinID + coreFileName, ValueToString(m_outletID), suffix, m_conn, m_outputGfs, true);
			//pi->AddPrintItem(sTimeStr, eTimeStr, strSubbasinID + coreFileName, suffix);
		}
		else if (StringMatch(subBsn, Tag_AllSubbsn) && isRaster) 
		{
			/// Output of all subbasins of DT_Raster1D or DT_Raster2D
			vector<string> aggTypes = utils::SplitString(aggType, ',');
			for(vector<string>::iterator it = aggTypes.begin(); it != aggTypes.end(); it++)
				pi->AddPrintItem(*it, sTimeStr, eTimeStr, strSubbasinID + coreFileName, suffix, m_conn, m_outputGfs);
		}
		else // subbasin IDs is provided
		{
			pi->setInterval(interval);
			pi->setIntervalUnits(intervalUnit);
			vector<string> subBsns;
			if (StringMatch(subBsn, Tag_AllSubbsn))
			{
				for(int i = 0; i <= m_nSubbasins; i++)
					subBsns.push_back(ValueToString(i));
				vector<string>(subBsns).swap(subBsns);
			}
			else
				subBsns = utils::SplitString(subBsn, ',');
			for(vector<string>::iterator it = subBsns.begin(); it != subBsns.end(); it++)
				pi->AddPrintItem(sTimeStr, eTimeStr, strSubbasinID + coreFileName, *it, suffix, m_conn, m_outputGfs, true);
		}
    }
	for (map<string, PrintInfo*>::iterator it = m_printInfosMap.begin(); it != m_printInfosMap.end(); it++)
	{
		m_printInfos.push_back(it->second);
	}
	vector<PrintInfo*>(m_printInfos).swap(m_printInfos);
    bson_destroy(b);
    mongoc_collection_destroy(collection);
    mongoc_cursor_destroy(cursor);
    return true;
}
示例#3
0
bool SettingsOutput::ParseOutputSettings(int subBasinID)
{
    PrintInfo *pi = NULL;
    ostringstream oss;
    oss << subBasinID << "_";
    string strSubbasinID = oss.str();

    for (size_t i = 0; i < m_Settings.size(); i++)
    {
        // Sample output entries from the FILE.OUT file
        // placed here for reference
        //OUTPUTID  | PET_TS
        //INTERVAL  | 24 | HOURS
        //SITECOUNT | 2
        //SITENAME  | 720_pet
        //STARTTIME | 2000/01/01/00
        //ENDTIME   | 2000/12/31/00
        //FILENAME  | PET_720.txt
        //SITENAME  | 736_pet
        //STARTTIME | 2001/01/01/00
        //ENDTIME   | 2001/12/31/00
        //FILENAME  | 736_PET.txt

        //OUTPUTID  | D_PREC
        //TYPE      | SUM
        //COUNT     | 2
        //STARTTIME | 2000/01/01/00
        //ENDTIME   | 2000/01/31/00
        //FILENAME  | D_PREC_1.asc
        //STARTTIME | 2000/02/01/00
        //ENDTIME   | 2000/02/28/00
        //FILENAME  | D_PREC_2.asc

        // OUTPUTID starts a new PrintInfo
        if (StringMatch(m_Settings[i][0], Tag_OutputID))
        {
            // is this the first PrintInfo or not
            if (pi != NULL)
            {
                // not the first PrintInfo so add this one to the list before starting a new one
                m_printInfos.push_back(pi);
            }
            // reset the pointer
            pi = NULL;
            // start a new PrintInfo
            pi = new PrintInfo();
            // set the OUTPUTID for the new PrintInfo
            pi->setOutputID(m_Settings[i][1]);

            // for QOUTLET or QTotal or SEDOUTLET or DissovePOutlet or AmmoniumOutlet or NitrateOutlet
            if (StringMatch(m_Settings[i][1], TAG_OUT_QOUTLET) || StringMatch(m_Settings[i][1], TAG_OUT_QTOTAL) ||
                StringMatch(m_Settings[i][1], TAG_OUT_SEDOUTLET)
                || StringMatch(m_Settings[i][1], Tag_DisPOutlet) || StringMatch(m_Settings[i][1], Tag_AmmoOutlet)
                || StringMatch(m_Settings[i][1], Tag_NitrOutlet))
            {
                string starttm = "";
                string endtm = "";
                string fname = "";
                string suffix = "";
                // check to see if we have all 4 values we need
                for (int flag = 0; flag < 4; flag++)
                {
                    i++;
                    if (StringMatch(m_Settings[i][0], Tag_Interval))
                    {
                        // set the interval length
                        pi->setInterval(atoi(m_Settings[i][1].c_str()));
                        // set the interval units
                        pi->setIntervalUnits(m_Settings[i][2].c_str());
                    }
                    else if (StringMatch(m_Settings[i][0], Tag_StartTime))
                    {
                        // get the start time
                        starttm = m_Settings[i][1];
                    }
                    else if (StringMatch(m_Settings[i][0], Tag_EndTime))
                    {
                        // get the end time
                        endtm = m_Settings[i][1];
                    }
                    else if (StringMatch(m_Settings[i][0], Tag_FileName))
                    {
                        // get the filename, but not include the suffix.
                        // modified by ZhuLJ, 2015/6/16
                        fname = strSubbasinID + GetCoreFileName(m_Settings[i][1]);
                        suffix = GetSuffix(m_Settings[i][1]);
                    }
                }
                pi->AddPrintItem(starttm, endtm, fname, suffix);
            }
        }
        // INTERVAL is used only for the PET_TS output
        if (StringMatch(m_Settings[i][0], Tag_Interval))
        {
            // check that an object exists
            if (pi != NULL)
            {
                // set the interval length
                pi->setInterval(atoi(m_Settings[i][1].c_str()));
                // set the interval units
                pi->setIntervalUnits(m_Settings[i][2].c_str());
            }
        }
        // SITECOUNT is used only for the time series output for sites
        if (StringMatch(m_Settings[i][0], Tag_SiteCount))
        {
            string sitename = "";
            string starttm = "";
            string endtm = "";
            string fname = "";
            string suffix = "";
            // get the number of sites in the list
            int cnt = atoi(m_Settings[i][1].c_str());
            // for each site in the list
            for (int idx = 0; idx < cnt; idx++)
            {
                // reset values
                sitename = "";
                endtm = "";
                starttm = "";
                fname = "";

                // check to see if we have all 4 values we need
                for (int flag = 0; flag < 4; flag++)
                {
                    i++;
                    if (StringMatch(m_Settings[i][0], Tag_SiteID))
                    {
                        // get the sitename
                        sitename = m_Settings[i][1];
                    }
                    else if (StringMatch(m_Settings[i][0], Tag_StartTime))
                    {
                        // get the start time
                        starttm = m_Settings[i][1];
                    }
                    else if (StringMatch(m_Settings[i][0], Tag_EndTime))
                    {
                        // get the end time
                        endtm = m_Settings[i][1];
                    }
                    else if (StringMatch(m_Settings[i][0], Tag_FileName))
                    {
                        // get the filename
                        fname = strSubbasinID + GetCoreFileName(m_Settings[i][1]);
                        //get suffix
                        suffix = GetSuffix(m_Settings[i][1]);
                    }
                }

                // check to see if there is a site to save
                if (sitename.size() > 0)
                {
                    // add the print item
                    pi->AddPrintItem(starttm, endtm, fname, sitename, suffix, m_conn, m_outputGfs, false);
                }
            }
        }
        // SUBBASINCOUNT is used only for the time series output for subbasins
        if (StringMatch(m_Settings[i][0], Tag_SubbasinCount) ||
            StringMatch(m_Settings[i][0], Tag_ReservoirCount))
        {
            string subbasinname = "";
            string starttm = "";
            string endtm = "";
            string fname = "";
            string suffix = "";
            // get the number of sites in the list
            int cnt = atoi(m_Settings[i][1].c_str());
            // for each site int he list
            for (int idx = 0; idx < cnt; idx++)
            {
                // reset values
                subbasinname = "";
                endtm = "";
                starttm = "";
                fname = "";
                suffix = "";
                // check to see if we have all 4 values we need
                for (int flag = 0; flag < 4; flag++)
                {
                    i++;
                    if (StringMatch(m_Settings[i][0], Tag_SubbasinId) ||
                        StringMatch(m_Settings[i][0], Tag_ReservoirId))
                    {
                        // get the sitename
                        subbasinname = m_Settings[i][1];
                    }
                    else if (StringMatch(m_Settings[i][0], Tag_StartTime))
                    {
                        // get the start time
                        starttm = m_Settings[i][1];
                    }
                    else if (StringMatch(m_Settings[i][0], Tag_EndTime))
                    {
                        // get the end time
                        endtm = m_Settings[i][1];
                    }
                    else if (StringMatch(m_Settings[i][0], Tag_FileName))
                    {
                        // get the filename
                        fname = strSubbasinID + GetCoreFileName(m_Settings[i][1]);
                        // get the suffix
                        suffix = GetSuffix(m_Settings[i][1]);
                    }
                }

                // check to see if there is a site to save
                if (subbasinname.size() > 0)
                {
                    // add the print item
                    pi->AddPrintItem(starttm, endtm, fname, subbasinname, suffix, m_conn, m_outputGfs, true);
                }
            }
        }
        if (StringMatch(m_Settings[i][0], Tag_Count))
        {
            string type = "";
            string starttm = "";
            string endtm = "";
            string fname = "";
            string suffix = "";
            // get the number of sites in the list
            int cnt = atoi(m_Settings[i][1].c_str());
            // for each site int he list
            for (int idx = 0; idx < cnt; idx++)
            {
                endtm = "";
                starttm = "";
                fname = "";
                suffix = "";
                // check to see if we have all 3 values we need
                for (int flag = 0; flag < 4; flag++)
                {
                    i++;
                    if (StringMatch(m_Settings[i][0], Tag_AggType))
                    {
                        // get the type
                        type = m_Settings[i][1];
                    }
                    else if (StringMatch(m_Settings[i][0], Tag_StartTime))
                    {
                        // get the start time
                        starttm = m_Settings[i][1];
                    }
                    else if (StringMatch(m_Settings[i][0], Tag_EndTime))
                    {
                        // get the end time
                        endtm = m_Settings[i][1];
                    }
                    else if (StringMatch(m_Settings[i][0], Tag_FileName))
                    {
                        // get the filename
                        fname = strSubbasinID + GetCoreFileName(m_Settings[i][1]);
                        // get the suffix
                        suffix = GetSuffix(m_Settings[i][1]);
                    }
                }

                // check to see if there is a site to save
                if (starttm.size() > 0)
                {
                    // add the print item
                    pi->AddPrintItem(type, starttm, endtm, fname, suffix, m_conn, m_outputGfs);
                }
            }
        }
    }

    if (pi != NULL)
    {
        // add the last one.
        m_printInfos.push_back(pi);
        pi = NULL;
    }
    return true;
}