XmlQueryModelInterpreter.java :  » Mobile » gt-mobisim » edu » gatech » lbs » sim » config » helper » Java Open Source

Java Open Source » Mobile » gt mobisim 
gt mobisim » edu » gatech » lbs » sim » config » helper » XmlQueryModelInterpreter.java
// Copyright (c) 2009, Georgia Tech Research Corporation
// Authors:
//   Peter Pesti (pesti@gatech.edu)
//
package edu.gatech.lbs.sim.config.helper;

import org.w3c.dom.Element;

import edu.gatech.lbs.sim.Simulation;
import edu.gatech.lbs.sim.config.IXmlConfigInterpreter;
import edu.gatech.lbs.sim.config.paramparser.DistanceParser;
import edu.gatech.lbs.sim.config.paramparser.TimeParser;
import edu.gatech.lbs.sim.scheduling.activity.TraceGenerationActivity;
import edu.gatech.lbs.sim.scheduling.activity.TraceLoadingActivity;
import edu.gatech.lbs.sim.tracegenerator.ITraceGenerator;
import edu.gatech.lbs.sim.tracegenerator.mobilitytrace.locationdistribution.ILocationDistribution;
import edu.gatech.lbs.sim.tracegenerator.paramdistribution.IParamDistribution;
import edu.gatech.lbs.sim.tracegenerator.querytrace.GlobalFixedNumberRangeQueryModel;

public class XmlQueryModelInterpreter implements IXmlConfigInterpreter {
  protected String mobilityTraceFilename;

  public XmlQueryModelInterpreter(String mobilityTraceFilename) {
    this.mobilityTraceFilename = mobilityTraceFilename;
  }

  public void initFromXmlElement(Element querymodelNode, Simulation sim) {
    ITraceGenerator queryTraceGenerator = null;

    if (querymodelNode == null) {
      return;
    }

    String queryTraceFilename = querymodelNode.getAttribute("filename");
    String querymodelType = querymodelNode.getAttribute("type");
    String overwriteAllowed = querymodelNode.getAttribute("overwrite");

    if (querymodelType.equalsIgnoreCase(GlobalFixedNumberRangeQueryModel.getXmlName())) {
      String queryCountStr = querymodelNode.getAttribute("count");
      int queryCount = Integer.parseInt(queryCountStr);

      // radius distribution:
      Element rangeDistributionNode = (Element) querymodelNode.getElementsByTagName("radius").item(0);
      XmlParamDistributionInterpreter interpreter = new XmlParamDistributionInterpreter(new DistanceParser());
      interpreter.initFromXmlElement(rangeDistributionNode, sim);
      IParamDistribution rangeDistribution = interpreter.getParamDistribution();

      // lifetime:
      Element lifetimeDistributionNode = (Element) querymodelNode.getElementsByTagName("lifetime").item(0);
      XmlParamDistributionInterpreter interpreter2 = new XmlParamDistributionInterpreter(new TimeParser());
      interpreter2.initFromXmlElement(lifetimeDistributionNode, sim);
      IParamDistribution lifetimeDistribution = interpreter2.getParamDistribution();

      // location distribution:
      // if there is no locationdistribution defined, the queries will be uniformly distributed across simAgentIds
      Element locationDistributionNode = (Element) querymodelNode.getElementsByTagName("locationdistribution").item(0);
      XmlLocationDistributionInterpreter ldInterpreter = new XmlLocationDistributionInterpreter();
      ldInterpreter.initFromXmlElement(locationDistributionNode, sim);
      ILocationDistribution locationDistribution = ldInterpreter.getLocationDistribution();

      queryTraceGenerator = new GlobalFixedNumberRangeQueryModel(mobilityTraceFilename, sim, rangeDistribution, lifetimeDistribution, locationDistribution, queryCount);

    } else {
      System.out.println("Unknown query model: " + querymodelType);
      System.exit(-1);
    }

    sim.addActivity(new TraceGenerationActivity(queryTraceFilename, queryTraceGenerator, overwriteAllowed.equalsIgnoreCase("yes")));
    sim.addActivity(new TraceLoadingActivity(queryTraceFilename));
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.