14#include "arcane/core/CaseOptionExtended.h"
16#include "arcane/utils/ITraceMng.h"
17#include "arcane/utils/FatalErrorException.h"
18#include "arcane/utils/StringBuilder.h"
19#include "arcane/utils/internal/ParameterCaseOption.h"
21#include "arcane/core/ICaseMng.h"
22#include "arcane/core/CaseOptionError.h"
23#include "arcane/core/ICaseDocumentVisitor.h"
24#include "arcane/core/XmlNodeList.h"
25#include "arcane/core/ICaseOptionList.h"
26#include "arcane/core/MeshHandle.h"
27#include "arcane/core/ICaseDocument.h"
28#include "arcane/core/CaseOptionException.h"
29#include "arcane/core/internal/StringVariableReplace.h"
30#include "arcane/core/internal/ICaseMngInternal.h"
59 pco.indexesInParam(full_xpath, option_in_param,
false);
62 Integer size = elem_list.size();
65 if (size == 0 && option_in_param.
empty() && is_optional) {
75 if (!option_in_param.
empty()) {
76 max_in_param = option_in_param[0];
77 for (
Integer index : option_in_param) {
78 if (index > max_in_param)
81 if (max_occurs >= 0) {
82 if (max_in_param > max_occurs) {
83 StringBuilder msg =
"Bad number of occurences in command line (greater than max)";
84 msg +=
" index_max_in_param=";
95 if (max_occurs >= 0) {
96 if (size > max_occurs) {
97 StringBuilder msg =
"Bad number of occurences (greater than max)";
100 msg +=
" max_occur=";
111 Integer final_size = std::max(size, std::max(min_occurs, max_in_param));
114 _allocate(final_size);
125 for (
Integer i = 0; i < final_size; ++i) {
129 if (option_in_param.
contains(i + 1)) {
130 str_val = pco.getParameterOrNull(full_xpath, i + 1,
false);
137 str_val = velem.
value();
142 if (str_val.
null()) {
147 str_val = StringVariableReplace::replaceWithCmdLineArgs(params, str_val,
true);
152 if (str_val.
null()) {
157 tm->
info(5) <<
"TryConvert opt=" << _xpathFullName() <<
" i=" << i
159 <<
" value=" << str_val;
160 bool is_bad = _tryToConvert(str_val,i);
181 for(
Integer i=0, s=_nbElem(); i<s; ++i )
191 visitor->applyVisitor(
this);
206 if (_isInitialized()){
207 bool is_bad = _tryToConvert(def_value);
210 ARCANE_FATAL(
"Can not convert '{0}' to type '{1}' (option='{2}')",
217 _setDefaultValue(def_value);
233 CaseOptionSimple::_search(is_phase1);
240 bool has_valid_value =
true;
241 if (str_val.
null()) {
249 has_valid_value =
false;
251 _setHasValidValue(has_valid_value);
252 if (has_valid_value){
255 <<
" value=" << str_val;
256 bool is_bad = _tryToConvert(str_val);
275 _checkIsInitialized();
288 visitor->applyVisitor(
this);
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
bool empty() const
Capacité (nombre d'éléments alloués) du vecteur.
bool contains(ConstReferenceType v) const
Vrai si le tableau contient l'élément de valeur v.
String name() const
Retourne le nom de l'option correspondant au langage du jeu de données.
String _defaultValue() const
Retourne la valeur par défaut de l'option ou 0 s'il n'y en a pas.
ICaseMng * caseMng() const
Gestionnaire de cas.
ICaseDocumentFragment * caseDocumentFragment() const
Retourne le document associé à cette option.
bool isOptional() const
Permet de savoir si une option est optionnelle.
Integer maxOccurs() const
Nombre maximum d'occurences (pour une option multiple) (-1 == unbounded)
XmlNode rootElement() const
Retourne l'élément racine du DOM.
ITraceMng * traceMng() const
Gestionnaire de traces.
ICaseOptionList * parentOptionList() const
OptionList parent.
Integer minOccurs() const
Nombre minimum d'occurences (pour une option multiple)
static void addInvalidTypeError(ICaseDocumentFragment *document, const TraceInfo &where, const String &node_name, const XmlNode &parent, const String &value, const String &expected_type)
Erreur lorsqu'une valeur d'une jeu de données n'est pas du bon type. Cette erreur est collective.
static void addOptionNotFoundError(ICaseDocumentFragment *document, const TraceInfo &where, const String &node_name, const XmlNode &parent)
Erreur lorsqu'une option du jeu de données n'est pas trouvée. Cette erreur est collective.
Exception en rapport avec le jeu de données.
void _search(bool is_phase1) override
Cherche la valeur de l'option dans le jeu de donnée.
void setDefaultValue(const String &def_value)
Positionne la valeur par défaut de l'option.
String m_value
Valeur de l'option sous forme de chaîne unicode.
void print(const String &lang, std::ostream &o) const override
Imprime la valeur de l'option dans le langage lang,sur le flot o.
void visit(ICaseDocumentVisitor *visitor) const override
Applique le visiteur sur cette option.
UniqueArray< String > m_values
Valeurs sous forme de chaînes unicodes.
void print(const String &lang, std::ostream &o) const override
Imprime la valeur de l'option dans le langage lang,sur le flot o.
void _search(bool is_phase1) override
Cherche la valeur de l'option dans le jeu de données.
void visit(ICaseDocumentVisitor *visitor) const override
Applique le visiteur sur cette option.
String xpathFullName() const
Nom complet au format donné par la norme XPath.
bool hasValidValue() const
Indique si l'option a une valeur invalide.
bool isOptional() const
Indique si l'option est facultative.
bool isPresent() const
Retourne true si l'option est présente.
Interface du visiteur pour une option du jeu de données.
virtual const ParameterListWithCaseOption & parameters() const =0
Liste des paramètres pouvant surcharger le jeu de données.
virtual ICaseMngInternal * _internalImpl()=0
Implémentation interne.
virtual MeshHandle meshHandle() const =0
Handle du maillage associé
Interface du gestionnaire de traces.
virtual TraceMessage info()=0
Flot pour un message d'information.
Classe représentant l'ensemble des paramètres pouvant modifier les options du jeu de données.
Liste de paramètres avec informations pour surcharger les options du jeu de données.
ParameterCaseOption getParameterCaseOption(const String &language) const
Méthode permettant de récupérer un objet de type ParameterCaseOption.
Constructeur de chaîne de caractère unicode.
String toString() const
Retourne la chaîne de caractères construite.
Chaîne de caractères unicode.
bool null() const
Retourne true si la chaîne est nulle.
Vecteur 1D de données avec sémantique par valeur (style STL).
Liste de noeuds d'un arbre DOM.
String value() const
Valeur du noeud.
XmlNodeList children(const String &name) const
Ensemble des noeuds fils de ce noeud ayant pour nom name.
bool null() const
Vrai si le noeud est nul.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.