bool SimulationMaker::readOutputElement(QObject* parent) { Q_ASSERT(reader->isStartElement() && parent); QString objectName = attributeValue("name"); if (objectName.isEmpty()) objectName = "anonymous"; QString type = attributeValue("type").toLower(); Output *output; try { output = OutputMaker::create(type, objectName, parent); } catch (Exception &ex) { throw Exception(message(ex.message())); } nextElementDelim(); while (!reader->hasError() && reader->isStartElement()) { if (elementNameEquals("parameter")) { readParameterElement(output); } else if (elementNameEquals("variable")) { readVariableElement(output); } else { throw Exception(message( "Unknown element in 'output' element: " + elementName())); } } Q_ASSERT(reader->isEndElement()); nextElementDelim(); return output; }
bool SimulationMaker::readModelElement(QObject* parent) { Q_ASSERT(reader->isStartElement()); QString modelType = attributeValue("type", "anonymous"); QString objectName = attributeValue("name", "anonymous"); QString hide = attributeValue("hide", ""); QString instancesStr = attributeValue("instances", ""); bool manyInstances = !instancesStr.isEmpty(); int instances = 1; if (manyInstances) { bool ok(true); instances = instancesStr.toInt(&ok); if (!ok || instances <= 0) throw Exception("instances must a number larger than zero"); } Model *model; try { for (int i = 0; i < instances; ++i) { QString objectInstanceName = objectName; if (manyInstances) objectInstanceName += "(" + QString::number(i+1) + ")"; model = ModelMaker::create(modelType, objectInstanceName, parent); if (!hide.isEmpty()) { bool isHidden = UniSim::stringToValue<bool>(hide); model->setHide(isHidden); } } } catch (Exception &ex) { throw Exception(message(ex.message()), parent); } nextElementDelim(); while (!reader->hasError() && reader->isStartElement()) { if (elementNameEquals("model")) { readModelElement(model); } else if (elementNameEquals("dataset")){ readDatasetElement(model); } else if (elementNameEquals("parameter")){ readParameterElement(model); } else { throw Exception(message("Unexpected element: '" + elementName() + "'"), parent); } } Q_ASSERT(reader->isEndElement()); nextElementDelim(); return model; }
bool SimulationMaker::readOutputElement(QObject* parent) { Q_ASSERT(reader->isStartElement() && parent); QString objectName = attributeValue("name", "anonymous"); QString type = attributeValue("type", parent); QString summary = attributeValue("summary", ""); Output *output; try { output = OutputMaker::create(type, objectName, parent); if (!summary.isEmpty()) { bool isSummary = UniSim::stringToValue<bool>(summary); output->setIsSummary(isSummary); } } catch (Exception &ex) { throw Exception(message(ex.message())); } nextElementDelim(); while (!reader->hasError() && reader->isStartElement()) { if (elementNameEquals("parameter")) { readParameterElement(output); } else if (elementNameEquals("read-parameter")) { readOutputParameterElement(output); } else if (elementNameEquals("variable")) { readOutputVariableElement(output); } else if (elementNameEquals("data")) { readOutputDataElement(output); } else { throw Exception(message("Unexpected element: '" + elementName() + "'"), parent); } } Q_ASSERT(reader->isEndElement()); nextElementDelim(); return output; }
void SimulationMaker::readDatasetElement(QObject* parent) { Q_ASSERT(reader->isStartElement()); QString objectName = attributeValue("name", parent); Dataset *dataset = new Dataset(objectName, parent); nextElementDelim(); while (!reader->hasError() && reader->isStartElement()) { if (elementNameEquals("parameter")){ readParameterElement(dataset); } else { throw Exception(message("Unexpected element: '" + elementName() + "'"), parent); } } Q_ASSERT(reader->isEndElement()); nextElementDelim(); }
bool SimulationMaker::readIntegratorElement(QObject* parent) { Q_ASSERT(reader->isStartElement() && parent); QString type = attributeValue("type"); if (type.isEmpty()) throw Exception(message("Missing 'type' attribute for 'integrator' element")); QString name = attributeValue("name"); if (name.isEmpty()) name = "anonymous"; Integrator *integrator; try { integrator = IntegratorMaker::create(type, name, parent); } catch (Exception &ex) { throw Exception(message(ex.message())); } _sequence.clear(); nextElementDelim(); while (!reader->hasError() && reader->isStartElement()) { if (elementNameEquals("sequence")) { readSequenceElement(integrator); } else if (elementNameEquals("parameter")){ readParameterElement(dynamic_cast<Parameters*>(integrator)); } else { throw Exception(message( "Unknown element in 'model' element: " + elementName())); } } Q_ASSERT(reader->isEndElement()); nextElementDelim(); return integrator; }
bool SimulationMaker::readIntegratorElement(QObject* parent) { Q_ASSERT(reader->isStartElement() && parent); QString type = attributeValue("type", parent); QString name = attributeValue("name", "anonymous"); Integrator *integrator; try { integrator = IntegratorMaker::create(type, name, parent); } catch (Exception &ex) { throw Exception(message(ex.message())); } _sequence.clear(); nextElementDelim(); while (!reader->hasError() && reader->isStartElement()) { if (elementNameEquals("sequence")) { readSequenceElement(integrator); } else if (elementNameEquals("parameter")){ readParameterElement(integrator); } else if (elementNameEquals("model")){ readModelElement(integrator); } else { throw Exception(message( "Unexpected element: '" + elementName() + "'"), parent); } } Q_ASSERT(reader->isEndElement()); nextElementDelim(); return integrator; }
bool SimulationMaker::readModelElement(QObject* parent) { Q_ASSERT(reader->isStartElement()); QString modelType = attributeValue("type"); if (modelType.isEmpty()) modelType = "anonymous"; QString objectName = attributeValue("name"); if (objectName.isEmpty()) objectName = "anonymous"; Model *model; try { model = ModelMaker::create(modelType, objectName, parent); } catch (Exception &ex) { throw Exception(message(ex.message())); } nextElementDelim(); while (!reader->hasError() && reader->isStartElement()) { if (elementNameEquals("model")) { readModelElement(model); } else if (elementNameEquals("parameter")){ readParameterElement(dynamic_cast<Parameters*>(model)); } else { throw Exception(message( "Unknown element in 'model' element: " + elementName())); } } Q_ASSERT(reader->isEndElement()); nextElementDelim(); return model; }