⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 checkconfig.java

📁 peersim仿真chord协议的测试过的环境
💻 JAVA
字号:
/* * Copyright (c) 2003-2005 The BISON Project * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 2 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */package peersim.config;import java.util.*;import peersim.cdsim.*;import peersim.edsim.*;import peersim.util.*;/** * This is utility tool that checks whether a config file can be loaded * or not, without actually performing the simulation. All the error * messages generated by controls and protocols when initialized are * reported.  This is useful to check all the configuration files in a  * directory. */public class CheckConfig {//========================== parameters ================================//======================================================================/** * This is the prefix of the config properties whose value vary during * a set of experiments. * @config */private static final String PAR_RANGE = "range";// ========================== static constants ==========================// ======================================================================/** {@link CDSimulator} */protected static final int CDSIM = 0;/** {@link EDSimulator} */protected static final int EDSIM = 1;protected static final int UNKNOWN = -1;/** the class names of simulators used */protected static final String[] simName = {	CDSimulator.class.getCanonicalName(),	EDSimulator.class.getCanonicalName(),};	// ========================== methods ===================================// ======================================================================/*** Returns the numeric id of the simulator to invoke. At the moment this can* be {@link #CDSIM}, {@link #EDSIM} or {@link #UNKNOWN}.*/protected static int getSimID() {		if( CDSimulator.isConfigurationCycleDriven())	{		return CDSIM;	}	else if( EDSimulator.isConfigurationEventDriven() )	{			return EDSIM;	}	else	return UNKNOWN;}// ----------------------------------------------------------------------/*** Loads the configuration and checks the configuration files against* simple configuration errors, such as missing classes, missing * parameters or syntax errors.* <p>* The goal is to provide a mechanism to test a configuration file,* without having to perform the actual simulations (that could be* time-consuming) and without necessarily blocking after the first* error encountered. It may be useful, for example, when a major * refactoring of your code requires a thorough check on all your * configuration files.* <p>* Loading the configuration is currently done with the help of * constructing an instance of {@link ParsedProperties} using the * constructor {@link ParsedProperties#ParsedProperties(String[])},* in the same way as the normal simulator.* <p>* After loading the configuration, the collection of nodes forming a * Network is instantiated, together with all protocols forming a* node. Initialization controls are executed, and then the simulation* stops. * <p>* For each error encountered, a message is printed ons standard error,* and the initialization keeps going without interruption. If multiple * errors are present, an error message for each of them is printed.* Apart from errors, default choices are also printed as warnings, to * allow developers to spot subtle configuration errors such as missing* parameters that defaults to standard values.* * @param args passed on to* {@link ParsedProperties#ParsedProperties(String[])}*/public static void main(String[] args)  throws Exception{	System.setErr(new NullPrintStream());	Properties prop = new ParsedProperties(args);	Configuration.setConfig( prop, true );	parseRanges(prop);		final int SIMID = getSimID();	if( SIMID == UNKNOWN )	{		System.err.println(		    "Simulator: unable to identify configuration, exiting.");		return;	}		try {			// XXX could be done through reflection, but		// this is easier to read.		switch(SIMID)		{		case CDSIM:			// Set cycles to 0, so no simulation is ever performed.			prop.setProperty(CDSimulator.PAR_CYCLES, "0");			CDSimulator.nextExperiment();			break;		case EDSIM:			// Set endtime to 0, so no simulation is ever performed.			prop.setProperty(EDSimulator.PAR_ENDTIME, "0");			EDSimulator.nextExperiment();			break;		}		} catch (MissingParameterException e) {		System.out.println(e.getMessage());		System.exit(1);	} catch (IllegalParameterException e) {		System.out.println(e.getMessage());		System.exit(1);	}	}/** * Parses a collection of range specifications, identifies the set * of parameters that will change during the simulation and * instantiates them with the first value of their ranges. */private static void parseRanges(Properties prop){	// Get ranges	String[] ranges = Configuration.getNames(PAR_RANGE);	for (int i = 0; i < ranges.length; i++) {		String[] array = Configuration.getString(ranges[i]).split(";");		if (array.length != 2) {			throw new IllegalParameterException(ranges[i],					" should be formatted as <parameter>;<value list>");		}		String[] values = StringListParser.parseList(array[1]);		prop.setProperty(array[0], values[0]);	}}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -