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"
36class CaseDocumentFragment
44 ~CaseDocumentFragment()
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);
105 ~CaseDocument()
override;
107 void build()
override;
121 bool hasError()
const override {
return m_fragment.hasError(); }
122 bool hasWarnings()
const override {
return m_fragment.hasWarnings(); }
123 void printErrors(std::ostream& o)
override { m_fragment.printErrors(o); }
124 void printWarnings(std::ostream& o)
override { m_fragment.printWarnings(o); }
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);
227 doc->setLanguage(lang);
235CaseDocumentFragment::
239, m_doc_holder(document)
240, m_document_node(m_doc_holder->documentNode())
250, m_fragment(tm,document)
265void CaseDocumentFragment::
270 m_root_elem = m_document_node.documentElement();
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);
314 XmlNode& root_elem = m_fragment.m_root_elem;
316 _forceCreateChild(root_elem,cnn->mesh);
317 m_mesh_elems = root_elem.
children(cnn->mesh);
319 m_functions_elem = _forceCreateChild(root_elem,cnn->functions);
320 m_meshes_elem = root_elem.
child(cnn->meshes);
322 m_user_class = root_elem.
attrValue(cnn->user_class);
323 m_code_name = root_elem.
attrValue(cnn->code_name);
324 m_code_version = root_elem.
attrValue(cnn->code_version);
325 m_code_unit_system = root_elem.
attrValue(cnn->code_unit);
340void CaseDocumentFragment::
341_assignLanguage(
const String& langname)
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;
366 m_fragment.m_root_elem.setAttrValue(
caseNodeNames()->user_class,value);
376 m_fragment.m_root_elem.setAttrValue(
caseNodeNames()->code_name,value);
385 m_code_version = value;
386 m_fragment.m_root_elem.setAttrValue(
caseNodeNames()->code_version,value);
395 m_code_unit_system = value;
396 m_fragment.m_root_elem.setAttrValue(
caseNodeNames()->code_unit,value);
408 m_errors.add(case_error);
417 m_warnings.add(case_error);
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.
Vue constante d'un tableau de type T.
Interface d'une partie d'un jeu de données.
Interface d'une classe gérant un document XML du jeu de données.
Interface du gestionnaire de traces.
Gestionnaire d'un document DOM.
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.
TraceAccessor(ITraceMng *m)
Construit un accesseur via le gestionnaire de trace m.
TraceMessage error() const
Flot pour un message d'erreur.
Liste de noeuds d'un arbre DOM.
String attrValue(const String &name, bool throw_exception=false) const
Valeur de l'attribut name.
XmlNode child(const String &name) const
Noeud fils de celui-ci de nom name.
XmlNodeList children(const String &name) const
Ensemble des noeuds fils de ce noeud ayant pour nom name.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
bool arcaneIsCheck()
Vrai si on est en mode vérification.