Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
CaseOptionBase.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2023 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* CaseOptionBase.cc (C) 2000-2023 */
9/* */
10/* Gestion des options du jeu de données. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/core/CaseOptionBase.h"
15
16#include "arcane/utils/FatalErrorException.h"
17#include "arcane/utils/StringBuilder.h"
18
19#include "arcane/core/CaseOptionBuildInfo.h"
20#include "arcane/core/StringDictionary.h"
21#include "arcane/core/CaseOptions.h"
22#include "arcane/core/ICaseMng.h"
23#include "arcane/core/ICaseDocument.h"
24#include "arcane/core/CaseOptionException.h"
25#include "arcane/core/internal/ICaseOptionListInternal.h"
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
30namespace Arcane
31{
32
33/*---------------------------------------------------------------------------*/
34/*---------------------------------------------------------------------------*/
64
65/*---------------------------------------------------------------------------*/
66/*---------------------------------------------------------------------------*/
67
68CaseOptionBasePrivate::
69CaseOptionBasePrivate(const CaseOptionBuildInfo& cob)
70: m_case_mng(cob.caseMng())
71, m_parent_option_list(cob.caseOptionList())
72, m_case_document_fragment(m_parent_option_list->caseDocumentFragment())
73, m_root_element()
74, m_true_name(cob.name())
75, m_name(m_true_name)
76, m_axl_default_value(cob.defaultValue())
77, m_default_value(m_axl_default_value)
78, m_min_occurs(cob.minOccurs())
79, m_max_occurs(cob.maxOccurs())
80, m_is_initialized(false)
81, m_is_override_default(false)
82{
83}
84
85/*---------------------------------------------------------------------------*/
86/*---------------------------------------------------------------------------*/
87
88/*---------------------------------------------------------------------------*/
89/*---------------------------------------------------------------------------*/
90
91CaseOptionBase::
92CaseOptionBase(const CaseOptionBuildInfo& cob)
93: m_p(new CaseOptionBasePrivate(cob))
94{
95 cob.caseOptionList()->_internalApi()->addConfig(this,cob.element());
96}
97
98/*---------------------------------------------------------------------------*/
99/*---------------------------------------------------------------------------*/
100
101CaseOptionBase::
102~CaseOptionBase()
103{
104 delete m_p;
105}
106
107/*---------------------------------------------------------------------------*/
108/*---------------------------------------------------------------------------*/
109
111caseMng() const
112{
113 return m_p->m_case_mng;
114}
115
116/*---------------------------------------------------------------------------*/
117/*---------------------------------------------------------------------------*/
118
124
125/*---------------------------------------------------------------------------*/
126/*---------------------------------------------------------------------------*/
127
129traceMng() const
130{
131 return m_p->m_case_mng->traceMng();
132}
133
134/*---------------------------------------------------------------------------*/
135/*---------------------------------------------------------------------------*/
136
138subDomain() const
139{
140 return m_p->m_case_mng->subDomain();
141}
142
143/*---------------------------------------------------------------------------*/
144/*---------------------------------------------------------------------------*/
145
146ICaseDocument* CaseOptionBase::
147caseDocument() const
148{
149 return caseMng()->caseDocument();
150}
151
152/*---------------------------------------------------------------------------*/
153/*---------------------------------------------------------------------------*/
154
160
161/*---------------------------------------------------------------------------*/
162/*---------------------------------------------------------------------------*/
163
165_defaultValue() const
166{
167 return m_p->m_default_value;
168}
169
170/*---------------------------------------------------------------------------*/
171/*---------------------------------------------------------------------------*/
172
173void CaseOptionBase::
174_setDefaultValue(const String& def_value)
175{
178}
179
180/*---------------------------------------------------------------------------*/
181/*---------------------------------------------------------------------------*/
182
184search(bool is_phase1)
185{
186 _setCategoryDefaultValue();
187 _setTranslatedName();
188 _search(is_phase1);
189}
190
191/*---------------------------------------------------------------------------*/
192/*---------------------------------------------------------------------------*/
193
195trueName() const
196{
197 return m_p->m_true_name;
198}
199
200/*---------------------------------------------------------------------------*/
201/*---------------------------------------------------------------------------*/
202
204name() const
205{
206 return m_p->m_name;
207}
208
209/*---------------------------------------------------------------------------*/
210/*---------------------------------------------------------------------------*/
211
213minOccurs() const
214{
215 return m_p->m_min_occurs;
216}
217
218/*---------------------------------------------------------------------------*/
219/*---------------------------------------------------------------------------*/
220
222maxOccurs() const
223{
224 return m_p->m_max_occurs;
225}
226
227/*---------------------------------------------------------------------------*/
228/*---------------------------------------------------------------------------*/
229
230void CaseOptionBase::
231_setTranslatedName()
232{
234 if (lang.null())
236 else{
238 if (!tr.null()){
239 //cerr << "** TRANSLATION FOR " << m_p->m_true_name << " is " << tr << " in " << lang << '\n';
240 m_p->m_name = tr;
241 }
242 }
243}
244
245/*---------------------------------------------------------------------------*/
246/*---------------------------------------------------------------------------*/
247
248void CaseOptionBase::
249_setCategoryDefaultValue()
250{
251 // Si le développeur a surchargé l'option, ne fait rien
253 return;
254 String category = caseDocumentFragment()->defaultCategory();
255 if (category.null())
257 else{
258 String v = m_p->m_default_values.find(category);
259 if (!v.null()){
260 m_p->m_default_value = v;
261 }
262 }
263}
264
265/*---------------------------------------------------------------------------*/
266/*---------------------------------------------------------------------------*/
267
269translatedName(const String& lang) const
270{
271 if (!lang.null()){
273 if (!tr.null())
274 return tr;
275 }
276 return m_p->m_name;
277}
278
279/*---------------------------------------------------------------------------*/
280/*---------------------------------------------------------------------------*/
281
287
288/*---------------------------------------------------------------------------*/
289/*---------------------------------------------------------------------------*/
290
292rootElement() const
293{
294 return m_p->m_root_element;
295}
296
297/*---------------------------------------------------------------------------*/
298/*---------------------------------------------------------------------------*/
299
305
306/*---------------------------------------------------------------------------*/
307/*---------------------------------------------------------------------------*/
308
310addDefaultValue(const String& category,const String& value)
311{
313}
314
315/*---------------------------------------------------------------------------*/
316/*---------------------------------------------------------------------------*/
317
318void CaseOptionBase::
319_setIsInitialized()
320{
321 m_p->m_is_initialized = true;
322}
323
324/*---------------------------------------------------------------------------*/
325/*---------------------------------------------------------------------------*/
326
327bool CaseOptionBase::
328_isInitialized() const
329{
330 return m_p->m_is_initialized;
331}
332
333/*---------------------------------------------------------------------------*/
334/*---------------------------------------------------------------------------*/
335
336void CaseOptionBase::
337_checkIsInitialized() const
338{
339 if (!_isInitialized()){
340 ARCANE_THROW(CaseOptionException,"option non initialisée '{0}'",name());
341 }
342}
343
344/*---------------------------------------------------------------------------*/
345/*---------------------------------------------------------------------------*/
346
347void CaseOptionBase::
348_checkMinMaxOccurs(Integer nb_occur)
349{
350 Integer min_occurs = m_p->m_min_occurs;
351 Integer max_occurs = m_p->m_max_occurs;
352
353 if (nb_occur<min_occurs){
354 StringBuilder msg = "Bad number of occurences (less than min)";
355 msg += " nb_occur=";
356 msg += nb_occur;
357 msg += " min_occur=";
358 msg += min_occurs;
359 msg += " option=";
361 msg += "/";
362 msg += name();
363 throw CaseOptionException(A_FUNCINFO,msg.toString(),true);
364 }
365 if (max_occurs>=0)
366 if (nb_occur>max_occurs){
367 StringBuilder msg = "Bad number of occurences (greater than max)";
368 msg += " nb_occur=";
369 msg += nb_occur;
370 msg += " max_occur=";
371 msg += max_occurs;
372 msg += " option=";
374 msg += "/";
375 msg += name();
376 throw CaseOptionException(A_FUNCINFO,msg.toString(),true);
377 }
378}
379
380/*---------------------------------------------------------------------------*/
381/*---------------------------------------------------------------------------*/
382
383String CaseOptionBase::
384_xpathFullName() const
385{
387}
388
389/*---------------------------------------------------------------------------*/
390/*---------------------------------------------------------------------------*/
391
392}
393
394/*---------------------------------------------------------------------------*/
395/*---------------------------------------------------------------------------*/
396
#define ARCANE_THROW(exception_class,...)
Macro pour envoyer une exception avec formattage.
Implémentation de la classe de base d'une option du jeu de données.
const String m_axl_default_value
Valeur par défaut initiale.
Integer m_min_occurs
Nombre minimum d'occurences.
String m_name
Nom traduit de l'option.
ICaseMng * m_case_mng
Gestionnaire du sous-domaine.
XmlNode m_root_element
Elément du DOM de l'option.
Integer m_max_occurs
Nombre maximum d'occurences (-1 == unbounded)
StringDictionary m_default_values
Liste des valeurs par défaut par catégorie.
bool m_is_initialized
true si initialisé
ICaseDocumentFragment * m_case_document_fragment
Document associé
String m_default_value
Valeur par défaut.
StringDictionary m_name_translations
Liste des noms d'options par langue.
ICaseOptionList * m_parent_option_list
Parent.
String m_true_name
Nom de l'option.
String name() const
Retourne le nom de l'option correspondant au langage du jeu de données.
String translatedName(const String &lang) const
Nom dans la langue lang de l'option. Retourne name() si pas de traduction.
void addDefaultValue(const String &category, const String &value)
Ajoute la valeur par défaut value à la catégorie category.
String _defaultValue() const
Retourne la valeur par défaut de l'option ou 0 s'il n'y en a pas.
void search(bool is_phase1)
Récupère la valeur du fichier de configuration pour la variable.
ICaseMng * caseMng() const
Gestionnaire de cas.
ICaseDocumentFragment * caseDocumentFragment() const
Retourne le document associé à cette option.
void addAlternativeNodeName(const String &lang, const String &name)
Ajoute une traduction pour le nom de l'option.
void setRootElement(const XmlNode &root_element)
Positionne l'élément racine à root_element.
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.
CaseOptionBasePrivate * m_p
Implémentation.
ISubDomain * subDomain() const
Gestionnaire de sous-domaine.
String trueName() const
Retourne le vrai nom (non traduit) de l'option.
ICaseOptionList * parentOptionList() const
OptionList parent.
Integer minOccurs() const
Nombre minimum d'occurences (pour une option multiple)
Informations pour construire une option de jeu de données.
Interface d'une partie d'un jeu de données.
virtual String defaultCategory() const =0
Catégorie utilisée pour les valeurs par défaut.
virtual String language() const =0
Langage utilisé dans le jeu de données.
Interface d'une classe gérant un document XML du jeu de données.
Interface du gestionnaire de cas.
Definition ICaseMng.h:56
virtual ITraceMng * traceMng()=0
Gestionnaire de traces.
virtual ISubDomain * subDomain()=0
Gestionnaire de sous-domaine.
virtual ICaseDocument * caseDocument()=0
Document XML du jeu de données (peut être nul si pas de jeu de donneés)
Interface d'une liste d'options du jeu de données.
Interface du gestionnaire d'un sous-domaine.
Definition ISubDomain.h:74
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Dictionnaire de chaînes unicode.
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.
Noeud d'un arbre DOM.
Definition XmlNode.h:51
String xpathFullName() const
Nom XPath du noeud avec ces ancêtres.
Definition XmlNode.cc:143
Interface du gestionnaire de traces.
Chaîne de caractères unicode.
bool null() const
Retourne true si la chaîne est nulle.
Definition String.cc:304
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.