// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
ComparisonInputs JsonFilterParametersReader::readComparisonInputs(const QString name, ComparisonInputs defValues)
{
    BOOST_ASSERT(m_CurrentFilterIndex.isEmpty() == false);
    if (m_CurrentFilterIndex.contains(name) == false)
    {
        return defValues;
    }

    if (m_CurrentFilterIndex.value(name).isArray())
    {
        QJsonArray cInputsArray = m_CurrentFilterIndex.value(name).toArray();

        ComparisonInputs inputs;
        for (int i = 0; i < cInputsArray.size(); i++)
        {
            if (cInputsArray[i].isObject() == true)
            {
                QJsonObject cInputObj = cInputsArray[i].toObject();
                ComparisonInput_t cInput;
                if (cInput.readJson(cInputObj) == true)
                {
                    inputs.addInput(cInput);
                }
                else
                {
                    return defValues;
                }
            }
        }
        return inputs;
    }

    return defValues;
}
// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
int H5FilterParametersWriter::writeValue(const QString name, ComparisonInputs v)
{
  int numQFilters = static_cast<int>( v.size() );
  int err = 0;
  QString buf;
  QTextStream ss(&buf);

  // Create a string that is comma delimited for each comparison operator and new line delimited
  // to mark the end of each ComparisonOpertor struct
  for(int i = 0; i < numQFilters; i++)
  {
    ss << v[i].dataContainerName << "," << v[i].attributeMatrixName << "," << v[i].attributeArrayName << "," <<  v[i].compOperator << "," << v[i].compValue << "\n";
  }

  // Write the data set to the file and attach an attribute that says how many there were.
  if(numQFilters > 0)
  {
    err = QH5Lite::writeStringDataset(m_CurrentGroupId, name, buf);
    if (err < 0)
    {
      return err;
    }
    err = QH5Lite::writeScalarAttribute(m_CurrentGroupId, name, "NumInputs", numQFilters);
    if (err < 0)
    {
      return err;
    }
  }

  return err;
}
// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
int QFilterParametersWriter::writeValue(const QString name, ComparisonInputs v)
{
  int count = static_cast<int>( v.size() );
  int err = 0;
  m_Prefs->beginWriteArray(name, count);
  for(int i = 0; i < count; ++i)
  {
    ComparisonInput_t d = v[i];
    m_Prefs->setArrayIndex(i);
    m_Prefs->setValue("DataContainerName", d.dataContainerName);
    m_Prefs->setValue("AttributeMatrixName", d.attributeMatrixName);
    m_Prefs->setValue("AttributeArrayName", d.attributeArrayName);
    m_Prefs->setValue("CompOperator", d.compOperator);
    m_Prefs->setValue("CompValue", d.compValue);
  }
  m_Prefs->endArray();
  return err;
}
// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
int H5FilterParametersWriter::writeValue(const QString name, ComparisonInput_t comp)
{
  ComparisonInputs v;
  v.addInput(comp);
  return writeValue(name, v);
}