//this function will be called by any file Monitor if the file is changed. it will load file and invoke the update method when there is data change.
void Configuration::fileChanged(const string &fileName)
{
    if(files.find(fileName) != files.end())
    {
        set < Data > prev = files[fileName];
        files[fileName].clear();
        
        loadPropertyConfig(fileName);
        set < Data > &curr = files[fileName];

        set < Data > :: iterator prevIt = prev.begin();
 
        for(; prevIt != prev.end(); ++ prevIt)
        {
            if(false == hasKeyInFile(fileName, prevIt->key))
            {
                //deletion occurs
                ConfigurationEvent event(CONFIGURATION_DELETED, fileName, prevIt->key, prevIt->value);
                update(event);
                
                //config is deleted from file, so treat is like default configuratoin.
                addProperty("", prevIt->key, prevIt->value);
            }
            else if(prevIt->value != getValueFromFile(fileName, prevIt->key))
            {
                //modification occurs
                ConfigurationEvent event(CONFIGURATION_MODIFIED, fileName, prevIt->key, prevIt->value);
                update(event);
            }
        }
        
        set < Data > :: iterator currIt = curr.begin();
        for(; currIt != curr.end(); ++currIt)
        {
            if(prev.find(*currIt) == prev.end())
            {
                //addition occurs
                ConfigurationEvent event(CONFIGURATION_ADDED, fileName, currIt->key, currIt->value);
                update(event);
            }
        }
        
    }
}
void sim_params::load(string filename) {
	string word;
	ifstream file(filename.c_str()); if (!file) {cerr << "parameters file " << filename << " not opened " << endl; exit(1);}
	file >> word; file >> word;

	Eta = getValueFromFile(file);
	theta = getValueFromFile(file);
	b = getValueFromFile(file);
	a1 = getValueFromFile(file);
	B1 = getValueFromFile(file);
	a2 = getValueFromFile(file);
	B2 = getValueFromFile(file);
	a3 = getValueFromFile(file);
	a4 = getValueFromFile(file);
	B4 = getValueFromFile(file);
	n_area = getValueFromFile(file);
	c_p1 = getValueFromFile(file);
	c_p2 = getValueFromFile(file);
	c_Rl = getValueFromFile(file);
	c_Rs = getValueFromFile(file);
	c_Rb = getValueFromFile(file);
	c_Rr = getValueFromFile(file);
	k_b = getValueFromFile(file);
	k_r = getValueFromFile(file);
	Y = getValueFromFile(file);
	c_bio = getValueFromFile(file);
	c_acc = getValueFromFile(file);
	c_r1 = getValueFromFile(file);
	c_r2 = getValueFromFile(file);
	c_ext = getValueFromFile(file);
	Pi_0 = getValueFromFile(file);
	c_d0 = getValueFromFile(file);
	c_d1 = getValueFromFile(file);
	c_d2 = getValueFromFile(file);
	c_d3 = getValueFromFile(file);
	seed_mass = getValueFromFile(file);
	wood_dens = getValueFromFile(file);
	c_s0 = getValueFromFile(file);
	log_mean_disturbance_interval = getValueFromFile(file);

	file.close();
}