14#include "arcane/utils/ScopedPtr.h"
15#include "arcane/utils/TraceAccessor.h"
16#include "arcane/utils/NotImplementedException.h"
17#include "arcane/utils/FatalErrorException.h"
18#include "arcane/utils/Array.h"
20#include "arcane/XmlNode.h"
21#include "arcane/IXmlDocumentHolder.h"
22#include "arcane/ICaseDocument.h"
23#include "arcane/CaseNodeNames.h"
24#include "arcane/CaseOptionError.h"
25#include "arcane/DomUtils.h"
46 delete m_case_node_names;
66 bool hasError()
const override;
67 bool hasWarnings()
const override;
78 CaseNodeNames* m_case_node_names =
nullptr;
79 ScopedPtrT<IXmlDocumentHolder> m_doc_holder;
80 XmlNode m_document_node;
83 String m_default_category;
84 UniqueArray<CaseOptionError> m_errors;
85 UniqueArray<CaseOptionError> m_warnings;
89 void _assignLanguage(
const String& langname);
90 void _printErrorsOrWarnings(std::ostream& o,ConstArrayView<CaseOptionError> errors);
107 void build()
override;
121 bool hasError()
const override {
return m_fragment.hasError(); }
122 bool hasWarnings()
const override {
return m_fragment.hasWarnings(); }
166 if (!m_fragment.m_language.
null())
173 CaseDocumentFragment m_fragment;
175 XmlNode m_arcane_elem;
176 XmlNode m_configuration_elem;
177 XmlNode m_timeloop_elem;
178 XmlNode m_title_elem;
179 XmlNode m_description_elem;
180 XmlNode m_modules_elem;
181 XmlNode m_services_elem;
182 XmlNodeList m_mesh_elems;
183 XmlNode m_functions_elem;
184 XmlNode m_meshes_elem;
188 String m_code_version;
189 String m_code_unit_system;
193 XmlNode _forceCreateChild(XmlNode& parent,
const String& us);
199extern "C++" ICaseDocumentFragment*
200arcaneCreateCaseDocumentFragment(ITraceMng* tm,IXmlDocumentHolder* document)
202 auto* doc =
new CaseDocumentFragment(tm,document);
210extern "C++" ICaseDocument*
211arcaneCreateCaseDocument(ITraceMng* tm,IXmlDocumentHolder* document)
213 ICaseDocument* doc =
new CaseDocument(tm,document);
221extern "C++" ICaseDocument*
222arcaneCreateCaseDocument(ITraceMng* tm,
const String& lang)
224 IXmlDocumentHolder* xml_doc = domutils::createXmlDocument();
225 CaseDocument* doc =
new CaseDocument(tm,xml_doc);
227 doc->setLanguage(lang);
235CaseDocumentFragment::
236CaseDocumentFragment(ITraceMng* tm,IXmlDocumentHolder* document)
238, m_case_node_names(new CaseNodeNames(String()))
239, m_doc_holder(document)
240, m_document_node(m_doc_holder->documentNode())
248CaseDocument(ITraceMng* tm,IXmlDocumentHolder* document)
250, m_fragment(tm,document)
265void CaseDocumentFragment::
271 if (m_root_elem.
null()){
273 if (m_language.
null())
274 m_language = String(
"fr");
275 _assignLanguage(m_language);
277 m_root_elem = m_document_node.createAndAppendElement(cnn->root,String());
278 m_root_elem.
setAttrValue(cnn->lang_attribute,m_language);
281 m_language = m_root_elem.
attrValue(cnn->lang_attribute);
283 if (m_language.
null()){
284 ARCANE_FATAL(
"Attribute '{0}' not specified in the element <{1}>",
285 cnn->lang_attribute,m_root_elem.
name());
288 _assignLanguage(m_language);
300 m_arcane_elem = _forceCreateChild(m_fragment.m_root_elem,
"arcane");
301 m_configuration_elem = _forceCreateChild(m_arcane_elem,
"configuration");
308 m_timeloop_elem = _forceCreateChild(m_arcane_elem,
cnn->timeloop);
309 m_title_elem = _forceCreateChild(m_arcane_elem,
cnn->title);
310 m_description_elem = _forceCreateChild(m_arcane_elem,
cnn->description);
311 m_modules_elem = _forceCreateChild(m_arcane_elem,
cnn->modules);
312 m_services_elem = _forceCreateChild(m_arcane_elem,
cnn->services);
319 m_functions_elem = _forceCreateChild(
root_elem,
cnn->functions);
324 m_code_version =
root_elem.attrValue(
cnn->code_version);
325 m_code_unit_system =
root_elem.attrValue(
cnn->code_unit);
340void CaseDocumentFragment::
343 delete m_case_node_names;
350XmlNode CaseDocument::
351_forceCreateChild(XmlNode& parent,
const String& name)
353 XmlNode node(parent.child(name));
355 node = parent.createAndAppendElement(name,String());
365 m_user_class = value;
385 m_code_version = value;
395 m_code_unit_system = value;
423bool CaseDocumentFragment::
426 return m_errors.size()!=0;
432bool CaseDocumentFragment::
435 return m_warnings.size()!=0;
444 _printErrorsOrWarnings(o,m_errors);
453 _printErrorsOrWarnings(o,m_warnings);
469void CaseDocumentFragment::
474 o <<
"TraceFile: " <<
error.trace().file() <<
":" <<
error.trace().line() <<
'\n';
475 o <<
"TraceFunc: " <<
error.trace().name() <<
'\n';
477 o <<
'<' <<
error.nodeName() <<
"> : " <<
error.message() <<
'\n';
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
void printWarnings(std::ostream &o) override
Ecrit les avertissements dans le flot o.
CaseNodeNames * caseNodeNames() override
Retourne l'instance contenant les noms des noeuds XML par langage.
String language() const override
Langage utilisé dans le jeu de données.
void printErrors(std::ostream &o) override
Ecrit les erreurs dans le flot o.
String defaultCategory() const override
Catégorie utilisée pour les valeurs par défaut.
IXmlDocumentHolder * documentHolder() override
Retourne le document Xml du jeu de données. Ce pointeur reste la propriété de cette classe et est dét...
void addError(const CaseOptionError &case_error) override
Ajoute une erreur dans le jeu de données.
void clearErrorsAndWarnings() override
Supprime les messages d'erreurs et d'avertissements enregistrés.
XmlNode documentNode() override
Retourne le noeud document.
void addWarning(const CaseOptionError &case_error) override
Ajoute un avertissement dans le jeu de données.
XmlNode rootElement() override
Retourne l'élément racine.
Classe gérant un document XML du jeu de données.
XmlNode rootElement() override
Retourne l'élément racine.
XmlNode meshesElement() override
Elément contenant la liste des maillages (nouveau mécanisme) (peut être nul)
String codeUnitSystem() const override
Nom du système d'unité du document.
XmlNode arcaneElement() override
Retourne l'élément des informations pour Arcane.
String codeName() const override
Nom du code du cas.
ICaseDocument * clone() override
Clone le document.
void setDefaultCategory(const String &v) override
Positionne la catégorie utilisée pour les valeurs par défaut.
const XmlNodeList & meshElements() override
Retourne l'élément racine des informations de maillage.
XmlNode descriptionElement() override
Retourne l'élément contenant la description du cas.
void addWarning(const CaseOptionError &case_error) override
Ajoute un avertissement dans le jeu de données.
void setUserClass(const String &value) override
Positionne le nom de la classe d'utilisation du cas.
XmlNode functionsElement() override
Retourne l'élément racine des fonctions.
String userClass() const override
Nom de la classe d'utilisation du cas.
XmlNode documentNode() override
Retourne le noeud document.
XmlNode modulesElement() override
Retourne l'élément contenant la description des modules.
CaseNodeNames * caseNodeNames() override
Retourne l'instance contenant les noms des noeuds XML par langage.
void setCodeVersion(const String &value) override
Positionne le numéro de version du code.
void setCodeUnitSystem(const String &value) override
Positionne le nom du systmème d'unité du document.
XmlNode timeloopElement() override
Retourne l'élément contenant le choix de la boucle en temps.
String defaultCategory() const override
Catégorie utilisée pour les valeurs par défaut.
XmlNode configurationElement() override
Retourne l'élément des informations de configuration.
XmlNode titleElement() override
Retourne l'élément contenant le titre du cas.
void printWarnings(std::ostream &o) override
Ecrit les avertissements dans le flot o.
IXmlDocumentHolder * documentHolder() override
Retourne le document Xml du jeu de données. Ce pointeur reste la propriété de cette classe et est dét...
void addError(const CaseOptionError &case_error) override
Ajoute une erreur dans le jeu de données.
ICaseDocumentFragment * fragment() override
Fragment correspondant à ce document.
void build() override
Construit l'instance.
void setCodeName(const String &value) override
Positionne le nom du code du cas.
XmlNode servicesElement() override
Retourne l'élément contenant la description des services.
String codeVersion() const override
Numéro de version du code correspondant au cas.
void printErrors(std::ostream &o) override
Ecrit les erreurs dans le flot o.
String language() const override
Langage utilisé dans le jeu de données.
void clearErrorsAndWarnings() override
Supprime les messages d'erreurs et d'avertissements enregistrés.
Noms des noeuds XML d'un jeu de données Arcane.
Erreur dans le jeu de données.
Interface d'une partie d'un jeu de données.
Interface d'une classe gérant un document XML du jeu de données.
Gestionnaire d'un document DOM.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Liste de noeuds d'un arbre DOM.
XmlNode documentElement() const
Retourne le noeud élément du document.
String attrValue(const String &name, bool throw_exception=false) const
Valeur de l'attribut name.
bool null() const
Vrai si le noeud est nul.
void setAttrValue(const String &name, const String &value)
Positionne l'attribut name à la valeur value.
String name() const
Nom du noeud.
Interface du gestionnaire de traces.
Exception lorsqu'une fonction n'est pas implémentée.
Chaîne de caractères unicode.
bool null() const
Retourne true si la chaîne est nulle.
Classe d'accès aux traces.
TraceMessage error() const
Flot pour un message d'erreur.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
bool arcaneIsCheck()
Vrai si on est en mode vérification.