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*
58class CaseOptionsPrivate
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())
73 m_mesh_handle = m_case_mng->meshMng()->defaultMeshHandle();
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;
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)
201 m_p->m_case_mng->unregisterOptions(
this);
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)
269 m_p->m_name_translations.add(lang,
name);
278 return m_p->m_config_list.get();
284const ICaseOptionList* CaseOptions::
287 return m_p->m_config_list.get();
296 return m_p->m_service_info;
305 return m_p->m_module;
314 m_p->m_service_info = m;
332 return m_p->m_case_mng;
338ITraceMng* CaseOptions::
350 return m_p->m_case_mng->subDomain();
359 return m_p->m_mesh_handle;
368 return meshHandle().
mesh();
377 return caseMng()->caseDocument();
384caseDocumentFragment()
const
386 auto* x =
m_p->m_own_case_document_fragment;
389 return caseMng()->caseDocumentFragment();
398 traceMng()->info(5) <<
"SetMeshHandle for " <<
m_p->m_name <<
" mesh_name=" << handle.meshName();
399 m_p->m_mesh_handle = handle;
408 parent->addChild(
this);
409 m_p->m_parent = parent;
410 _setMeshHandle(parent->meshHandle());
434 if (mesh_name.
empty()){
437 _setMeshHandle(
m_p->m_parent->meshHandle());
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;
481 String tr =
m_p->m_name_translations.find(lang);
485 return m_p->m_true_name;
494 return m_p->m_activate_function;
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()){
520 ICaseFunction* func = caseMng()->findFunction(func_activation_name);
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));
537 m_p->m_activate_function = func;
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::
625 ICaseOptionListInternal::create(this,this,cm,parent_element,
626 min_occurs,max_occurs))
638 ICaseOptionListInternal::create(this,this,parent,
639 parent_element,min_occurs,max_occurs))
652 return opt->subDomain();
Classe de base des vecteurs 1D de données.
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 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.
Interface du gestionnaire de traces.
virtual TraceMessage info()=0
Flot pour un message d'information.
Gestionnaire d'un document DOM.
virtual XmlNode documentNode()=0
Noeud document. Ce noeud est nul si le document n'existe pas.
IMesh * mesh() const
Maillage associé.
IMeshMng * meshMng() const
Gestionnaire de maillage associé. nullptr si isNull() est vrai.
Référence à une instance.
Encapsulation d'un pointeur avec compteur de référence.
String find(const String &key, bool throw_exception=false) const
Retourne la valeur associée à key.
Chaîne de caractères unicode.
bool null() const
Retourne true si la chaîne est nulle.
bool empty() const
Vrai si la chaîne est vide (nulle ou "")
Liste de noeuds d'un arbre DOM.
String xpathFullName() const
Nom XPath du noeud avec ces ancêtres.
String attrValue(const String &name, bool throw_exception=false) const
Valeur de l'attribut name.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eCaseOptionReadPhase
Phases de la lecture.
Int32 Integer
Type représentant un entier.
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Créé une référence sur un pointeur.