private synchronized void adjust() {
    // Generate random position in graph space
    tempISOM = new ISOMVertexData();
    tempXYD = new Coordinates();

    // creates a new XY data location
    tempXYD.setX(10 + Math.random() * getCurrentSize().getWidth());
    tempXYD.setY(10 + Math.random() * getCurrentSize().getHeight());

    // Get closest vertex to random position
    Vertex winner = elementAccessor.getVertex(tempXYD.getX(), tempXYD.getY());

    while (true) {
      try {
        for (Iterator iter = getVisibleVertices().iterator(); iter.hasNext(); ) {
          Vertex v = (Vertex) iter.next();
          ISOMVertexData ivd = getISOMVertexData(v);
          ivd.distance = 0;
          ivd.visited = false;
        }
        break;
      } catch (ConcurrentModificationException cme) {
      }
    }
    adjustVertex(winner);
  }
 /**
  * (non-Javadoc)
  *
  * @see
  *     edu.uci.ics.jung.visualization.AbstractLayout#initialize_local_vertex(edu.uci.ics.jung.graph.Vertex)
  */
 protected void initialize_local_vertex(Vertex v) {
   ISOMVertexData vd = getISOMVertexData(v);
   if (vd == null) {
     vd = new ISOMVertexData();
     v.addUserDatum(getIsomKey(), vd, UserData.REMOVE);
   }
   vd.visited = false;
 }
  private synchronized void adjustVertex(Vertex v) {
    queue.removeAllElements();
    ISOMVertexData ivd = getISOMVertexData(v);
    ivd.distance = 0;
    ivd.visited = true;
    queue.add(v);
    Vertex current;

    while (!queue.isEmpty()) {
      current = (Vertex) queue.remove(0);
      ISOMVertexData currData = getISOMVertexData(current);
      Coordinates currXYData = getCoordinates(current);

      double dx = tempXYD.getX() - currXYData.getX();
      double dy = tempXYD.getY() - currXYData.getY();
      double factor = adaption / Math.pow(2, currData.distance);

      currXYData.addX(factor * dx);
      currXYData.addY(factor * dy);

      if (currData.distance < radius) {
        Set s = current.getNeighbors();
        while (true) {
          try {
            for (Iterator iter = s.iterator(); iter.hasNext(); ) {
              Vertex child = (Vertex) iter.next();
              ISOMVertexData childData = getISOMVertexData(child);
              if (childData != null && !childData.visited) {
                childData.visited = true;
                childData.distance = currData.distance + 1;
                queue.addElement(child);
              }
            }
            break;
          } catch (ConcurrentModificationException cme) {
          }
        }
      }
    }
  }