📄 xmlwriter.java
字号:
writeQueueSection(doc, elem, model, stationKey);
writeTunnelSection(doc, elem, model, stationKey);
writeRouterSection(doc, elem, model, stationKey);
}else if(STATION_TYPE_FORK.equals(stationType)){
writeQueueSection(doc, elem, model, stationKey);
writeTunnelSection(doc, elem, model, stationKey);
writeForkSection(doc, elem, model, stationKey);
}else if(STATION_TYPE_JOIN.equals(stationType)){
writeJoinSection(doc, elem, model, stationKey);
writeTunnelSection(doc, elem, model, stationKey);
writeRouterSection(doc, elem, model, stationKey);
}else if(STATION_TYPE_SINK.equals(stationType)){
writeSinkSection(doc, elem, model, stationKey);
}
simNode.appendChild(elem);
}
}
/**
* Writes a Join input section
* <br>Author: Bertoli Marco
* @param doc document root
* @param node node where created section should be appended
* @param model data structure
* @param stationKey search's key for join
*/
private static void writeJoinSection(Document doc, Node node, CommonModel model, Object stationKey) {
Element join = doc.createElement(XML_E_STATION_SECTION);
join.setAttribute(XML_A_STATION_SECTION_CLASSNAME, CLASSNAME_JOIN);
node.appendChild(join);
}
/**
* Writes a Fork output section
* <br>Author: Bertoli Marco
* @param doc document root
* @param node node where created section should be appended
* @param model data structure
* @param stationKey search's key for fork
*/
private static void writeForkSection(Document doc, Node node, CommonModel model, Object stationKey) {
Element fork = doc.createElement(XML_E_STATION_SECTION);
fork.setAttribute(XML_A_STATION_SECTION_CLASSNAME, CLASSNAME_FORK);
node.appendChild(fork);
// Creates jobsPerLink parameter
XMLParameter jobsPerLink = new XMLParameter(
"jobsPerLink", model.getStationNumberOfServers(stationKey).getClass().getName(), null, model.getStationNumberOfServers(stationKey).toString(), false
);
// Creates block parameter
XMLParameter block = new XMLParameter(
"block", model.getForkBlock(stationKey).getClass().getName(), null, model.getForkBlock(stationKey).toString(), false
);
//...and adds them as fork's children
jobsPerLink.appendParameterElement(doc, fork);
block.appendParameterElement(doc, fork);
}
static protected void writeSourceSection(Document doc, Node nodeNode,
CommonModel model, Object stationKey){
Element elem = doc.createElement(XML_E_STATION_SECTION);
elem.setAttribute(XML_A_STATION_SECTION_CLASSNAME, CLASSNAME_SOURCE);
nodeNode.appendChild(elem);
Vector classes = model.getClassKeys();
//obtain classes that must be generated by this source
Vector refClasses = getClassesForSource(model, stationKey);
XMLParameter[] distrParams = new XMLParameter[classes.size()];
for(int i=0; i<distrParams.length; i++){
//if current class must be generated by this source
Object currentClass = classes.get(i);
if(refClasses.contains(currentClass)){
distrParams[i] = DistributionWriter.getDistributionParameter(
(Distribution)model.getClassDistribution(currentClass),
model, currentClass
);
}else{
//otherwise write a null parameter
String name = "ServiceTimeStrategy";
distrParams[i] = new XMLParameter(name,
strategiesClasspathBase + serviceStrategiesSuffix + name,
model.getClassName(currentClass), "null", true);
}
}
//creating global service strategy parameter
String gspName = "ServiceStrategy";
XMLParameter globalStrategyParameter = new XMLParameter(
gspName, strategiesClasspathBase + gspName, null, distrParams, false
);
//finally, create node from pareameters and append it to the section element
globalStrategyParameter.appendParameterElement(doc, elem);
}
static protected void writeSinkSection(Document doc, Node nodeNode,
CommonModel model, Object stationKey){
Element elem = doc.createElement(XML_E_STATION_SECTION);
elem.setAttribute(XML_A_STATION_SECTION_CLASSNAME, CLASSNAME_SINK);
nodeNode.appendChild(elem);
}
static protected void writeQueueSection(Document doc, Node nodeNode,
CommonModel model, Object stationKey){
//creating element representing queue section
Element queue = doc.createElement(XML_E_STATION_SECTION);
queue.setAttribute(XML_A_STATION_SECTION_CLASSNAME, CLASSNAME_QUEUE);
nodeNode.appendChild(queue);
//creating queue inner parameters
//first create queue size node element
String queueSize = model.getStationQueueCapacity(stationKey)==null ?
"-1" : model.getStationQueueCapacity(stationKey).toString();
XMLParameter queueLength = new XMLParameter(
"size", "java.lang.Integer", null, queueSize, false
);
//...and add it to queue element's children
queueLength.appendParameterElement(doc, queue);
// Drop policies. They are different for each customer class
XMLParameter[] queueDropStrategies = new XMLParameter[model.getClassKeys().size()];
XMLParameter queueDropStrategy = new XMLParameter("dropStrategies",
String.class.getName(),
null, queueDropStrategies, false
);
Vector classes = model.getClassKeys();
for(int i=0; i<queueDropStrategies.length; i++){
String dropStrategy = model.getDropRule(stationKey, classes.get(i));
queueDropStrategies[i] = new XMLParameter(
"dropStrategy",
String.class.getName(),
model.getClassName(classes.get(i)), (String)dropRulesNamesMatchings.get(dropStrategy), true
);
}
queueDropStrategy.appendParameterElement(doc, queue);
/*queue get strategy, which is fixed to FCFS, as difference between strategies can
be resolved by queueput strategies*/
XMLParameter queueGetStrategy = new XMLParameter(
"FCFSstrategy", strategiesClasspathBase + queuegetStrategiesSuffix + "FCFSstrategy",
null, (String)null, false
);
queueGetStrategy.appendParameterElement(doc, queue);
/*At last, queue put parameter, which can be defined differently for each
customerclass, so a more complex parameter structure is required*/
XMLParameter[] queuePutStrategies = new XMLParameter[model.getClassKeys().size()];
XMLParameter queuePutStrategy = new XMLParameter(
"NetStrategy", strategiesClasspathBase + "QueuePutStrategy",
null, queuePutStrategies, false
);
for(int i=0; i<queuePutStrategies.length; i++){
String queueStrategy = model.getQueueStrategy(stationKey, classes.get(i));
String queueputStrategyName = (String)queuePutStrategyNamesMatchings.get(queueStrategy);
queuePutStrategies[i] = new XMLParameter(
queueputStrategyName,
strategiesClasspathBase + queueputStrategiesSuffix + queueputStrategyName,
model.getClassName(classes.get(i)), (String)null, true
);
}
queuePutStrategy.appendParameterElement(doc, queue);
}
static protected void writeTerminalSection(Document doc, Node nodeNode,
CommonModel model, Object stationKey){
Element elem = doc.createElement(XML_E_STATION_SECTION);
elem.setAttribute(XML_A_STATION_SECTION_CLASSNAME, CLASSNAME_TERMINAL);
nodeNode.appendChild(elem);
Vector classes = model.getClassKeys();
//obtain classes that must be generated by this terminal
Vector refClasses = getClassesForTerminal(model, stationKey);
XMLParameter[] distrParams = new XMLParameter[classes.size()];
for(int i=0; i<distrParams.length; i++){
//if current class must be generated by this terminal
Object currentClass = classes.get(i);
if(refClasses.contains(currentClass)){
distrParams[i] = new XMLParameter("numberOfJobs",
"java.lang.Integer", model.getClassName(currentClass),
model.getClassPopulation(currentClass).toString(), true
);
}else{
//otherwise write a null parameter
distrParams[i] = new XMLParameter("numberOfJobs",
"java.lang.Integer", model.getClassName(currentClass),
"-1", true
);
}
}
//creating global population parameter
XMLParameter globalStrategyParameter = new XMLParameter(
"NumberOfJobs", "java.lang.Integer", null, distrParams, false
);
//finally, create node from pareameters and append it to the section element
globalStrategyParameter.appendParameterElement(doc, elem);
}
static protected void writeServerSection(Document doc, Node nodeNode,
CommonModel model, Object stationKey){
Element elem = doc.createElement(XML_E_STATION_SECTION);
elem.setAttribute(XML_A_STATION_SECTION_CLASSNAME, CLASSNAME_SERVER);
nodeNode.appendChild(elem);
Vector classes = model.getClassKeys();
//creating number of servers node element
Integer maxJobs = model.getStationNumberOfServers(stationKey);
XMLParameter numOfServers = new XMLParameter(
"maxJobs", "java.lang.Integer", null,
maxJobs != null ? maxJobs.toString() : "-1", false
);
numOfServers.appendParameterElement(doc, elem);
//creating visits node element
XMLParameter[] visits = new XMLParameter[classes.size()];
for(int i=0; i<visits.length; i++){
visits[i] = new XMLParameter("numberOfVisits", "java.lang.Integer",
model.getClassName(classes.get(i)), "1", true);
}
XMLParameter visitsParam = new XMLParameter("numberOfVisits",
"java.lang.Integer", null, visits, false);
visitsParam.appendParameterElement(doc, elem);
getServiceSection(model, stationKey).appendParameterElement(doc, elem);
}
/**
* Returns a service section rapresentation in XMLParameter format
* @param model model data structure
* @param stationKey search's key for current station
* @return service section rapresentation in XMLParameter format
* Author: Bertoli Marco
*/
protected static XMLParameter getServiceSection(CommonModel model, Object stationKey) {
Vector classes = model.getClassKeys();
//creating set of service time distributions
XMLParameter[] distrParams = new XMLParameter[classes.size()];
Object currentClass;
for(int i=0; i<distrParams.length; i++){
currentClass = classes.get(i);
Object serviceDistribution = model.getServiceTimeDistribution(stationKey, currentClass);
if (serviceDistribution instanceof Distribution)
// Service time is a Distribution and not a LDService
distrParams[i] = DistributionWriter.getDistributionParameter(
(Distribution)serviceDistribution,
model, currentClass);
else if (serviceDistribution instanceof ZeroStrategy)
// Zero Service Time Strategy --- Bertoli Marco
distrParams[i] = new XMLParameter("ZeroTimeServiceStrategy", ZeroStrategy.getEngineClassPath(), model.getClassName(currentClass), (String)null, true);
else {
// Load dependent Service Time Strategy --- Bertoli Marco
LDStrategy strategy = (LDStrategy) serviceDistribution;
XMLParameter[] ranges = new XMLParameter[strategy.getRangeNumber()];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -