14#include "arcane/core/CaseOptions.h"
16#include "arcane/utils/ITraceMng.h"
17#include "arcane/utils/FatalErrorException.h"
19#include "arcane/core/ICaseFunction.h"
20#include "arcane/core/ICaseMng.h"
21#include "arcane/core/ICaseDocument.h"
22#include "arcane/core/StringDictionary.h"
23#include "arcane/core/CaseNodeNames.h"
24#include "arcane/core/CaseOptionError.h"
25#include "arcane/core/ICaseDocumentVisitor.h"
26#include "arcane/core/MeshHandle.h"
27#include "arcane/core/IMeshMng.h"
28#include "arcane/core/IXmlDocumentHolder.h"
29#include "arcane/core/internal/ICaseMngInternal.h"
30#include "arcane/core/internal/ICaseOptionListInternal.h"
32#include "arcane/core/CaseOptionsMulti.h"
43namespace AxlOptionsBuilder
45extern "C++" IXmlDocumentHolder*
46documentToXml(
const Document& d);
63 : m_case_mng(cm), m_name(name), m_true_name(name)
69 : m_case_mng(co_list->
caseMng()), m_name(name), m_true_name(name),
72 if (m_mesh_handle.
isNull())
78 delete m_own_case_document_fragment;
90 bool m_is_multi =
false;
91 bool m_is_translated_name_set =
false;
92 bool m_is_phase1_read =
false;
95 bool m_is_case_mng_registered =
false;
99 Ref<ICaseMng> m_case_mng_ref;
109 m_p->m_config_list = ICaseOptionListInternal::create(cm,
this,
XmlNode());
110 m_p->m_is_case_mng_registered =
true;
121 m_p->m_config_list = ICaseOptionListInternal::create(parent,
this,
XmlNode());
132 m_p->m_config_list = ICaseOptionListInternal::create(cm,
this,parent_elem);
133 m_p->m_is_case_mng_registered =
true;
142 const XmlNode& parent_elem,
bool is_optional,
bool is_multi)
145 ICaseOptionList* col = ICaseOptionListInternal::create(parent,
this,parent_elem,is_optional,is_multi);
146 m_p->m_config_list = col;
149 _setTranslatedName();
159 m_p->m_config_list = config_list;
160 m_p->m_is_case_mng_registered =
true;
172 m_p->m_config_list = config_list;
186 m_p->m_config_list = ICaseOptionListInternal::create(cm,
this,parent_elem);
187 m_p->m_own_case_document_fragment = cm->
_internalImpl()->createDocumentFragment(xml_doc);
190 m_p->m_case_mng_ref = cm->toReference();
200 if (
m_p->m_is_case_mng_registered)
216 m_p->m_parent =
nullptr;
217 m_p->m_config_list =
nullptr;
226 return m_p->m_true_name;
244 return m_p->m_config_list->isPresent();
253 return m_p->m_config_list->xpathFullName();
267 if (
m_p->m_is_translated_name_set)
278 return m_p->m_config_list.get();
284const ICaseOptionList* CaseOptions::
287 return m_p->m_config_list.get();
332 return m_p->m_case_mng;
338ITraceMng* CaseOptions::
359 return m_p->m_mesh_handle;
368 return meshHandle().
mesh();
374ICaseDocument* CaseOptions::
383ICaseDocumentFragment* CaseOptions::
384caseDocumentFragment()
const
386 auto* x =
m_p->m_own_case_document_fragment;
396_setMeshHandle(
const MeshHandle& handle)
398 traceMng()->
info(5) <<
"SetMeshHandle for " <<
m_p->m_name <<
" mesh_name=" << handle.meshName();
399 m_p->m_mesh_handle = handle;
406_setParent(ICaseOptionList* parent)
408 parent->addChild(
this);
409 m_p->m_parent = parent;
410 _setMeshHandle(parent->meshHandle());
434 if (mesh_name.
empty()){
446 m_p->m_config_list->disable();
449 _setMeshHandle(*handle);
461 if (
m_p->m_is_translated_name_set)
462 traceMng()->
info() <<
"WARNING: translated name already set for " <<
m_p->m_name;
464 m_p->m_name =
m_p->m_true_name;
471 m_p->m_is_translated_name_set =
true;
485 return m_p->m_true_name;
504 bool is_phase1 = read_phase==eCaseOptionReadPhase::Phase1;
505 if (is_phase1 &&
m_p->m_is_phase1_read)
508 if (is_phase1 && !
m_p->m_is_translated_name_set)
509 _setTranslatedName();
511 m_p->m_config_list->readChildren(is_phase1);
516 XmlNode velem =
m_p->m_config_list->rootElement();
518 String func_activation_name = velem.
attrValue(cnn->function_activation_ref);
519 if (!func_activation_name.
null()){
523 String::format(
"No function with the name '{0}' exists",
524 func_activation_name));
528 String::format(
"The function '{0}' requires a parameter of type 'time'",
529 func_activation_name));
533 String::format(
"The function '{0}' requires a parameter of type 'bool'",
534 func_activation_name));
538 tm->
info() <<
"Use the function '" << func->
name() <<
"' to activate the option "
545 if (!func_name.
null())
547 String::format(
"Attribute <{0}> invalid.",
550 m_p->m_is_phase1_read =
true;
561 m_p->m_config_list->_internalApi()->addInvalidChildren(nlist);
568printChildren(
const String& lang,
int indent)
570 m_p->m_config_list->printChildren(lang,indent);
579 m_p->m_config_list->visit(visitor);
588 m_p->m_config_list->deepGetChildren(col);
600 content.m_document = xml_doc;
609Ref<ICaseOptions> CaseOptions::
612 return makeRef<ICaseOptions>(
this);
622CaseOptionsMulti(ICaseMng* cm,
const String& aname,
const XmlNode& parent_element,
623 Integer min_occurs,Integer max_occurs)
624: CaseOptions(cm,aname,
625 ICaseOptionListInternal::create(this,this,cm,parent_element,
626 min_occurs,max_occurs))
634CaseOptionsMulti(ICaseOptionList* parent,
const String& aname,
635 const XmlNode& parent_element,
636 Integer min_occurs,Integer max_occurs)
637: CaseOptions(parent,aname,
638 ICaseOptionListInternal::create(this,this,parent,
639 parent_element,min_occurs,max_occurs))
649extern "C++" ARCANE_CORE_EXPORT ISubDomain*
650_arcaneDeprecatedGetSubDomain(ICaseOptions* opt)
652 return opt->subDomain();
Option 'ServiceInstance' du jeu de données.
static void addError(ICaseDocumentFragment *document, const TraceInfo &where, const String &node_name, const String &message, bool is_collective=false)
Erreur générique.
IModule * m_module
Module associé ou 0 s'il n'y en a pas.
ICaseFunction * m_activate_function
Fonction indiquand l'état d'activation.
IServiceInfo * m_service_info
Service associé ou 0 s'il n'y en a pas.
String xpathFullName() const override
Nom complet au format XPath correspondant à rootElement()
void addInvalidChildren(XmlNodeList &) override
Ajoute à nlist les éléments non reconnus.
bool isPresent() const override
Vrai si l'option est présente dans le fichier, faux s'il s'agit de la valeur par défaut.
bool _setMeshHandleAndCheckDisabled(const String &mesh_name)
Positionne le maillage associé à cette option.
void setCaseServiceInfo(IServiceInfo *m) override
Associe le service m à ce jeu de données.
void visit(ICaseDocumentVisitor *visitor) const override
Applique le visiteur sur cette option.
void addAlternativeNodeName(const String &lang, const String &name) override
Ajoute une traduction pour le nom de l'option. Ajoute le nom name de l'option correspondant au langag...
String rootTagName() const override
Retourne le nom de l'élément dans le langage du jeu de données.
String rootTagTrueName() const override
Retourne le vrai nom (non traduit) de l'élément.
ICaseFunction * activateFunction() override
Fonction indiquant l'état d'activation de l'option.
void setCaseModule(IModule *m) override
Associe le module m à ce jeu de données.
String translatedName(const String &lang) const override
Nom dans la langue lang de l'option. Retourne rootTagTrueName() si pas de traduction.
virtual String name() const
Retourne le nom de l'élément dans le langage du jeu de données.
~CaseOptions() override
Libère les ressources.
IServiceInfo * caseServiceInfo() const override
Retourne le service associé ou 0 s'il n'y en a pas.
IModule * caseModule() const override
Retourne le module associé ou 0 s'il n'y en a pas.
CaseOptionsPrivate * m_p
Implémentation.
ISubDomain * subDomain() const override
Sous-domain associé.
void deepGetChildren(Array< CaseOptionBase * > &col) override
Ajoute à la liste col tous les options filles.
CaseOptions(ICaseMng *cm, const String &name)
Construit un jeu d'options.
virtual CaseNodeNames * caseNodeNames()=0
Retourne l'instance contenant les noms des noeuds XML par langage.
virtual String language() const =0
Langage utilisé dans le jeu de données.
Interface du visiteur pour une option du jeu de données.
@ ParamReal
Paramètre de type Real.
@ ValueBool
Valeur de type entière.
virtual String name() const =0
nom de la fonction
virtual eValueType valueType() const =0
Type des valeurs de la fonction.
virtual eParamType paramType() const =0
Type du paramètre de la fonction.
Interface du gestionnaire de cas.
virtual ICaseMngInternal * _internalImpl()=0
Implémentation interne.
virtual IMeshMng * meshMng() const =0
Gestionnaire de maillage associé
virtual ITraceMng * traceMng()=0
Gestionnaire de traces.
virtual ISubDomain * subDomain()=0
Gestionnaire de sous-domaine.
virtual ICaseDocumentFragment * caseDocumentFragment()=0
Fragment du Document XML associé au jeu de données (peut être nul si pas de jeu de donneés)
virtual void unregisterOptions(ICaseOptions *)=0
Déseregistre une liste d'options du jeu de donnée.
virtual ICaseDocument * caseDocument()=0
Document XML du jeu de données (peut être nul si pas de jeu de donneés)
virtual ICaseFunction * findFunction(const String &name) const =0
Retourne la fonction de nom name ou nullptr s'il n'y en a pas.
virtual void registerOptions(ICaseOptions *)=0
Enregistre une liste d'options du jeu de donnée.
virtual ICaseMng * caseMng() const =0
Retourne le gestionnaire du cas.
virtual MeshHandle meshHandle() const =0
Handle du maillage associé
virtual void removeChild(ICaseOptions *co)=0
Supprime co de la liste des fils.
virtual MeshHandle * findMeshHandle(const String &name, bool throw_exception)=0
Recherche le maillage de nom name.
virtual MeshHandle defaultMeshHandle() const =0
Handle pour le maillage par défaut.
Interface des informations d'un service ou d'un module.
Interface du gestionnaire d'un sous-domaine.
Gestionnaire d'un document DOM.
virtual XmlNode documentNode()=0
Noeud document. Ce noeud est nul si le document n'existe pas.
bool isNull() const
Indique si le handle est nul (il ne référence aucun maillage existant ou non)
IMesh * mesh() const
Maillage associé.
void add(const String &key, const String &value)
Ajoute le couple (key,value) au dictionnaire.
String find(const String &key, bool throw_exception=false) const
Retourne la valeur associée à key.
Liste de noeuds d'un arbre DOM.
String xpathFullName() const
Nom XPath du noeud avec ces ancêtres.
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.
Classe de base des vecteurs 1D de données.
Interface du gestionnaire de traces.
virtual TraceMessage info()=0
Flot pour un message d'information.
Encapsulation d'un pointeur avec compteur de référence.
Chaîne de caractères unicode.
bool empty() const
Vrai si la chaîne est vide (nulle ou "")
bool null() const
Retourne true si la chaîne est nulle.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eCaseOptionReadPhase
Phases de la lecture.