// IdName values can be found in ParameterValue entities which are used in Dashboards widget
  // parameters or Scheduler report runtime parameters
  private void convertOldIdNameClass() throws RepositoryException {
    String searchRoot = "/jcr:root" + ISO9075.encodePath(StorageConstants.NEXT_SERVER_ROOT);
    String searchPropertyName = "className";
    String searchPropertyValue = "com.asf.nextserver.domain.ParameterValue";
    String statement =
        searchRoot + "//*[@" + searchPropertyName + "='" + searchPropertyValue + "']";
    QueryResult queryResult = getTemplate().query(statement);

    NodeIterator nodes = queryResult.getNodes();
    LOG.info("Found " + nodes.getSize() + " parameter value nodes");
    while (nodes.hasNext()) {
      Node node = nodes.nextNode();
      Property property = null;
      try {
        property = node.getProperty("value");
      } catch (PathNotFoundException ex) {
        continue;
      }
      try {
        Object value = deserialize(property.getBinary().getStream());
        if (value instanceof Object[]) {
          Object[] values = (Object[]) value;
          Object[] convertedValues = new Object[values.length];
          boolean converted = false;
          for (int i = 0; i < values.length; i++) {
            Object tmp = values[i];
            if (tmp instanceof com.asf.nextreports.engine.queryexec.IdName) {
              com.asf.nextreports.engine.queryexec.IdName oldIdName =
                  (com.asf.nextreports.engine.queryexec.IdName) tmp;
              IdName idName = new IdName();
              idName.setId(oldIdName.getId());
              idName.setName(oldIdName.getName());
              convertedValues[i] = idName;
              converted = true;
            } else {
              convertedValues[i] = tmp;
            }
          }

          if (converted) {
            ValueFactory valueFactory = node.getSession().getValueFactory();
            Binary binary =
                valueFactory.createBinary(new ByteArrayInputStream(serialize(convertedValues)));
            property.setValue(binary);
          }
        } else if (value instanceof com.asf.nextreports.engine.queryexec.IdName) {
          com.asf.nextreports.engine.queryexec.IdName oldIdName =
              (com.asf.nextreports.engine.queryexec.IdName) value;
          IdName idName = new IdName();
          idName.setId(oldIdName.getId());
          idName.setName(oldIdName.getName());

          ValueFactory valueFactory = node.getSession().getValueFactory();
          Binary binary = valueFactory.createBinary(new ByteArrayInputStream(serialize(idName)));
          property.setValue(binary);
        }
      } catch (Exception e) {
        e.printStackTrace();
      }
    }

    getTemplate().save();
  }