private int collisionCount() {
    HashMap<Integer, VirtualEntity> coords;
    VirtualEntity current1, current2;
    coords = Globals.distribution.getDistribution();
    Iterator it1, it2 = coords.entrySet().iterator();
    int counter = 0;

    while (it2.hasNext()) {
      it1 = coords.entrySet().iterator();
      current2 = (VirtualEntity) ((Map.Entry) it2.next()).getValue();
      while (it1.hasNext()) {
        current1 = (VirtualEntity) ((Map.Entry) it1.next()).getValue();
        if (current1 != current2
            && VirtualWorld.samePosition(current2.getCoord(), current1.getCoord())) {
          counter++;
        }
      }
    }

    return counter;
  }
  private void executeSecondLife() {
    VirtualEntity entity;
    VirtualEntityShell shell;
    VirtualWorldDistributionShell firstStep;
    Iterator it;
    SolipsisProtocol solipsis;
    int i, toPercentCoef, percent, userNb;
    VirtualWorldDistribution vwd;

    Globals.mapSize = 25600;
    try {
      Globals.slTrace = new SecondLifeTraceDistribution("data/SecondLifeRecord2.txt");
      this.trace = Globals.slTrace;
    } catch (IOException e) {
      System.err.println("File error");
      System.exit(1);
    }

    vwd = new VirtualWorldDistribution();
    Globals.distribution = vwd;
    if (this.trace.getTrace().isEmpty()) {
      System.err.println("The file is corrupted");
      System.exit(1);
    }
    System.err.println("Joining nodes...");
    userNb = this.trace.getTrace().get(0).countAvatars();
    percent = 0;
    firstStep = this.trace.getTrace().get(0);
    it = firstStep.getDistribution().entrySet().iterator();
    userNb = firstStep.countAvatars();
    toPercentCoef = (userNb > 100) ? userNb / 100 : 1;
    i = 0;
    Globals.stepCount = 1;
    while (it.hasNext()) {
      shell = (VirtualEntityShell) ((Map.Entry) it.next()).getValue();
      entity = new VirtualEntity(shell.getCoord());
      solipsis = (SolipsisProtocol) Network.get(i).getProtocol(applicativeLayerId);
      solipsis.setPeersimNodeId(i);
      solipsis.setVirtualEntity(entity);
      entity.setProtocol(solipsis);
      entity.setOrder(i + 1);
      entity.setId(shell.getId());
      vwd.addToDistribution(entity);
      if (i > 0) {
        solipsis.join((SolipsisProtocol) Network.get(i - 1).getProtocol(applicativeLayerId));
      }
      i++;
      if (i % toPercentCoef == 0) System.err.println(++percent + "%");
    }
    Network.setCapacity(userNb);
    System.err.println("Done.");
    System.err.println("Normalizing Solipsis topology...");
    percent = 0;
    it = vwd.getDistribution().entrySet().iterator();
    for (i = 0; i < userNb; i++) {
      entity = (VirtualEntity) ((Map.Entry) it.next()).getValue();
      //        	System.out.println("peer "+i+": "+entity.getNeighbors().size());
      entity.getProtocol().finalizeKnowledgeZone();
      //        	System.out.println("peer "+i+": "+entity.getNeighbors().size());
      entity.getProtocol().simplifyTopology();
      //        	System.out.println("peer "+i+": "+entity.getNeighbors().size());
      if (i % (3 * toPercentCoef) == 0) System.err.println(++percent + "%");
    }

    it = vwd.getDistribution().entrySet().iterator();
    for (i = 0; i < userNb; i++) {
      entity = (VirtualEntity) ((Map.Entry) it.next()).getValue();
      entity.refreshState();
      if (i % (3 * toPercentCoef) == 0) System.err.println(++percent + "%");
    }

    it = vwd.getDistribution().entrySet().iterator();
    for (i = 0; i < userNb; i++) {
      entity = (VirtualEntity) ((Map.Entry) it.next()).getValue();
      entity.getProtocol().maintainKnowledgeZone();
      entity.getProtocol().finalizeKnowledgeZone();
      entity.getProtocol().removeUnwantedNeighbors();
      //        	System.out.println("peer "+i+": "+entity.getNeighbors().size());
      if (i % (3 * toPercentCoef) == 0) System.err.println(++percent + "%");
    }

    System.err.println("Done.");
    //    	for (int i = 0; i < 15; i++) {
    //    		System.out.println("cycle...");
    //    		Globals.distribution.animate();
    //
    //    	}
    Globals.topologyIsReady = true;
    System.err.println("Populated");
    //		System.err.println("Collisions:" + this.collisionCount());
    //		System.exit(2);
    if (Globals.realTime) {
      //    		VirtualWorldMonitor map = new VirtualWorldMonitor(vwd);
      //    		Globals.monitor = map;
      //        	map.showVirtualWorld();
      Globals.recorder = new VirtualWorldRecorder();
    } else {
      Globals.evaluator = new StatisticsGatherer();
    }
  }
  private void executeSynthetic() {

    int toPercentCoef, percent = 0;
    int userNb = Network.size();
    HashMap<Integer, VirtualEntity> coords;
    SolipsisProtocol solipsis;
    VirtualEntity entity;
    System.err.println("Populating Virtual World with " + userNb + " participants...");
    VirtualWorldDistribution vwd =
        new VirtualWorldDistribution(
            this.distribution,
            userNb,
            Globals.zoneNb,
            Globals.outOfZoneNb,
            Globals.mapSize,
            Globals.zoneSize,
            Globals.smallZoneSize,
            Globals.smallZoneNb,
            this.applicativeLayerId);
    Globals.distribution = vwd;
    coords = vwd.getDistribution();
    Iterator it = coords.entrySet().iterator();
    toPercentCoef = userNb / 100;
    System.err.println("Joining nodes...");
    for (int i = 0; i < userNb; i++) {
      entity = (VirtualEntity) ((Map.Entry) it.next()).getValue();
      solipsis = (SolipsisProtocol) Network.get(i).getProtocol(applicativeLayerId);
      solipsis.setVirtualEntity(entity);
      solipsis.setPeersimNodeId(i);
      entity.setProtocol(solipsis);
      entity.setOrder(i + 1);
      if (i > 0) {
        solipsis.join((SolipsisProtocol) Network.get(i - 1).getProtocol(applicativeLayerId));
      }
      if (i % toPercentCoef == 0) System.err.println(++percent + "%");
      //        	System.out.println("peer "+i+":
      // "+solipsis.getVirtualEntity().getNeighbors().size());
    }
    System.err.println("Done.");
    //    	System.out.println("uci2");
    System.err.println("Normalizing Solipsis topology...");
    percent = 0;
    it = coords.entrySet().iterator();
    for (int i = 0; i < userNb; i++) {
      entity = (VirtualEntity) ((Map.Entry) it.next()).getValue();
      //        	System.out.println("peer "+i+": "+entity.getNeighbors().size());
      entity.getProtocol().finalizeKnowledgeZone();
      //        	System.out.println("peer "+i+": "+entity.getNeighbors().size());
      entity.getProtocol().simplifyTopology();
      //        	System.out.println("peer "+i+": "+entity.getNeighbors().size());
      if (i % (3 * toPercentCoef) == 0) System.err.println(++percent + "%");
    }

    it = coords.entrySet().iterator();
    for (int i = 0; i < userNb; i++) {
      entity = (VirtualEntity) ((Map.Entry) it.next()).getValue();
      entity.refreshState();
      if (i % (3 * toPercentCoef) == 0) System.err.println(++percent + "%");
    }

    it = coords.entrySet().iterator();
    for (int i = 0; i < userNb; i++) {
      entity = (VirtualEntity) ((Map.Entry) it.next()).getValue();
      entity.getProtocol().maintainKnowledgeZone();
      entity.getProtocol().finalizeKnowledgeZone();
      entity.getProtocol().removeUnwantedNeighbors();
      //        	System.out.println("peer "+i+": "+entity.getNeighbors().size());
      if (i % (3 * toPercentCoef) == 0) System.err.println(++percent + "%");
    }

    System.out.println("Done.");
    //    	for (int i = 0; i < 15; i++) {
    //    		System.out.println("cycle...");
    //    		Globals.distribution.animate();
    //
    //    	}
    Globals.topologyIsReady = true;
    System.err.println("Populated");
    //		System.err.println("Collisions:" + this.collisionCount());
    //		System.exit(2);
    if (Globals.realTime) {
      //    		VirtualWorldMonitor map = new VirtualWorldMonitor(vwd);
      //    		Globals.monitor = map;
      //        	map.showVirtualWorld();
      Globals.recorder = new VirtualWorldRecorder();
    } else {
      Globals.evaluator = new StatisticsGatherer();
    }
  }