docs: private @Nullable String getRuleId(@Nonnull String loadBalancerId) throws CloudException, InternalException {
          // TODO: add trace
          try {
              final boolean isId = isId(loadBalancerId);
              final String key = (isId ? "publicIpId" : "publicIp");
  
              final Document doc = new CSMethod(getProvider()).get(LIST_LOAD_BALANCER_RULES, new Param(key, loadBalancerId));
              NodeList rules = doc.getElementsByTagName("loadbalancerrule");
  
              for( int i=0; i<rules.getLength(); i++ ) {
                  NodeList attributes = rules.item(i).getChildNodes();
                  String ruleId = null;
                  String publicIp = null;
                  for( int j=0; j<attributes.getLength(); j++ ) {
                      Node n = attributes.item(j);
                      String name = n.getNodeName().toLowerCase();
                      String value;
  
                      if( n.getChildNodes().getLength() > 0 ) {
                          value = n.getFirstChild().getNodeValue();
                      }
                      else {
                          value = null;
                      }
                      if( name.equals("publicip") ) {
                          publicIp = value;
                      }
                      else if( name.equals("id") ) {
                          ruleId = value;
                      }
                  }
                  if( loadBalancerId.equals(publicIp) ) {
                      return ruleId;
                  }
              }
          }
          catch( CSException e ) {
              if( e.getHttpCode() == 431 ) {
                  return null;
              }
              throw e;
          }
          return null;
      }