docs: private void processElementRotate(GeneratorSingleCluster cluster, Node cur) {
      int axis1 = 0;
      int axis2 = 0;
      double angle = 0.0;
  
      String a1str = ((Element) cur).getAttribute(ATTR_AXIS1);
      if(a1str != null && a1str.length() > 0) {
        axis1 = ParseUtil.parseIntBase10(a1str);
      }
      String a2str = ((Element) cur).getAttribute(ATTR_AXIS2);
      if(a2str != null && a2str.length() > 0) {
        axis2 = ParseUtil.parseIntBase10(a2str);
      }
      String anstr = ((Element) cur).getAttribute(ATTR_ANGLE);
      if(anstr != null && anstr.length() > 0) {
        angle = ParseUtil.parseDouble(anstr);
      }
      if(axis1 <= 0 || axis1 > cluster.getDim()) {
        throw new AbortException("Invalid axis1 number given in specification file.");
      }
      if(axis2 <= 0 || axis2 > cluster.getDim()) {
        throw new AbortException("Invalid axis2 number given in specification file.");
      }
      if(axis1 == axis2) {
        throw new AbortException("Invalid axis numbers given in specification file.");
      }
  
      // Add rotation to cluster.
      cluster.addRotation(axis1 - 1, axis2 - 1, Math.toRadians(angle));
  
      // TODO: check for unknown attributes.
      XMLNodeIterator iter = new XMLNodeIterator(cur.getFirstChild());
      while(iter.hasNext()) {
        Node child = iter.next();
        if(child.getNodeType() == Node.ELEMENT_NODE) {
          LOG.warning("Unknown element in XML specification file: " + child.getNodeName());
        }
      }
    }