14#include "arcane/utils/Iterator.h"
15#include "arcane/utils/ScopedPtr.h"
16#include "arcane/utils/ApplicationInfo.h"
17#include "arcane/utils/ITraceMng.h"
18#include "arcane/utils/List.h"
19#include "arcane/utils/OStringStream.h"
20#include "arcane/utils/FatalErrorException.h"
22#include "arcane/impl/TimeLoopReader.h"
24#include "arcane/IApplication.h"
25#include "arcane/IXmlDocumentHolder.h"
26#include "arcane/IIOMng.h"
27#include "arcane/ISubDomain.h"
28#include "arcane/XmlNode.h"
29#include "arcane/XmlNodeList.h"
30#include "arcane/XmlNodeIterator.h"
31#include "arcane/ICaseDocument.h"
32#include "arcane/ArcaneException.h"
33#include "arcane/ITimeLoopMng.h"
34#include "arcane/ITimeLoop.h"
35#include "arcane/IMainFactory.h"
36#include "arcane/SequentialSection.h"
37#include "arcane/TimeLoopEntryPointInfo.h"
38#include "arcane/TimeLoopSingletonServiceInfo.h"
39#include "arcane/impl/ConfigurationReader.h"
79 if (!time_loop_elem.
null())
80 value = time_loop_elem.
value();
84 value =
"ArcaneEmptyLoop";
86 m_time_loop_name = value;
87 info() <<
"Using the time loop <" << m_time_loop_name <<
">";
91 error() << ex <<
'\n';
110 if (!config_doc.
get())
112 XmlNode root_elem = config_doc->documentNode().documentElement();
127 String ustr_modules(
"modules");
131 info() <<
"CHECK GLOBAL SINGLETON SERVICES";
132 for(
const auto& i : global_singleton_elems ){
133 info() <<
"CHECK GLOBAL SINGLETON SERVICES 2 " << i.name();
135 for(
const auto& j_node : i ){
136 if (j_node.name()==
"service"){
137 bool is_required = (j_node.attrValue(
"need")==
"required");
138 info() <<
"GLOBAL SINGLETON SERVICE name=" << j_node.attrValue(ustr_name) <<
" is_required?=" << is_required;
144 for(
const auto& i : timeloops ){
145 optional_modules_list.
clear();
146 required_modules_list.
clear();
147 user_classes.
clear();
148 singleton_services.
clone(global_singleton_services);
150 String name = i.attrValue(ustr_name);
157 for(
const auto& j_node : timeloop_node ){
158 String elem_name = j_node.name();
159 String elem_value = j_node.value();
161 if (elem_name==ustr_modules){
163 if (k->name()==
"module"){
164 if (k->attrValue(
"need")==
"required")
165 required_modules_list.add(k->attrValue(ustr_name));
167 optional_modules_list.add(k->attrValue(ustr_name));
170 else if (elem_name==
"singleton-services"){
172 if (k->name()==
"service"){
173 bool is_required = (k->attrValue(
"need")==
"required");
178 else if (elem_name==
"entry-points"){
179 entry_points.
clear();
182 if (k_node.
name()!=
"entry-point")
188 String cwhere = j_node.attrValue(
"where");
198 s() <<
"Incorrect value for the attribute \"where\" (time loop ";
199 s() << name <<
"): \"" << cwhere <<
"\".\n";
200 s() <<
"Available values are: "
213 else if (elem_name==
"title")
217 else if (elem_name==
"description")
221 else if (elem_name==
"userclass")
223 user_classes.add(elem_value);
225 else if (elem_name==
"configuration"){
236 m_time_loops.add(time_loop);
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
void clear()
Supprime tous les éléments de la collection.
Lecteurs de fichiers de configuration.
void addValuesFromXmlNode(const XmlNode &element, Integer priority)
Ajoute des valeurs à la configuration.
Classe de base d'une exception.
Interface de l'application.
virtual XmlNode timeloopElement()=0
Retourne l'élément contenant le choix de la boucle en temps.
Manufacture des classes d'Arcane.
virtual ITimeLoop * createTimeLoop(IApplication *sm, const String &name)=0
Crée une boucle en temps de nom name.
Interface du gestionnaire d'un sous-domaine.
virtual ICaseDocument * caseDocument()=0
Document XML du cas.
virtual ITimeLoopMng * timeLoopMng()=0
Retourne le gestionnaire de la boucle en temps.
Interface du gestionnaire de la boucle en temps.
virtual void registerTimeLoop(ITimeLoop *time_loop)=0
Enregistrement et choix de la boucle en temps.
virtual void setUsedTimeLoop(const String &name)=0
Positionne la boucle en temps à exécuter. Sélectionne la boucle en temps de nom name comme celle qui ...
Interface d'une boucle en temps.
virtual void setUserClasses(const StringCollection &)=0
Retourne la liste des classes associées à la boucle en temps.
static const char * WRestore
appelé pour restaurer les variables lors d'un retour arrière
virtual void setRequiredModulesName(const StringCollection &)=0
Positionne la liste des des modules obligatoires.
static const char * WOnMeshChanged
appelé après un changement de maillage
virtual void setTitle(const String &)=0
Positionne le titre de la boucle en temps.
virtual void setSingletonServices(const TimeLoopSingletonServiceInfoCollection &c)=0
Positionne la liste des services singletons.
static const char * WExit
appelé lors de la terminaison du code.
virtual IConfiguration * configuration()=0
Options de configuration.
static const char * WOnMeshRefinement
appelé après un raffinement de maillage
virtual void setDescription(const String &)=0
Positionne la description de la boucle en temps.
virtual void setOptionalModulesName(const StringCollection &)=0
Positionne la liste des des modules facultatifs.
static const char * WBuild
appelé lors de la lecture du jeu de données
static const char * WComputeLoop
appelé pendant la boucle de calcul
virtual void setEntryPoints(const String &where, const TimeLoopEntryPointInfoCollection &)=0
Positionne la liste des noms des points d'entrée pour le point d'appel where.
static const char * WInit
appelé pendant l'initialisation, l'initialisation d'une reprise ou d'un nouveau cas
Exception lorsqu'une erreur interne survient.
Implémentation d'une collection d'éléments sous forme de vecteur.
void clone(const Collection< T > &base)
Clone la collection base.
ListEnumeratorT< ITimeLoop * > Enumerator
Flot de sortie lié à une String.
T * get() const
Retourne l'objet référé par l'instance.
Encapsulation d'un pointeur qui se détruit automatiquement.
Section de code à exécuter séquentiellement.
Chaîne de caractères unicode.
bool null() const
Retourne true si la chaîne est nulle.
Infos d'un point d'entrée d'une boucle en temps.
TimeLoopReader(IApplication *sm)
Crée une instance associée au gestionnaire sm.
void setUsedTimeLoop(ISubDomain *sd)
Positionne la boucle en temps utilisée dans le gestionnaire sd.
void readTimeLoops()
Effectue la lecture des boucles en temps disponible.
void registerTimeLoops(ISubDomain *sd)
Enregistre la liste des boucles en temps dans le gestionnaire sd.
~TimeLoopReader()
Libère les ressources.
IApplication * m_application
Superviseur.
Infos d'un service singleton d'une boucle en temps.
TraceAccessor(ITraceMng *m)
Construit un accesseur via le gestionnaire de trace m.
TraceMessage info() const
Flot pour un message d'information.
TraceMessage error() const
Flot pour un message d'erreur.
ITraceMng * traceMng() const
Gestionnaire de trace.
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.
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.
ConstIterT< XmlNode > const_iter
Type d'un itérateur constant sur tout le tableau.
String name() const
Nom du noeud.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
List< String > StringList
Tableau de chaînes de caractères unicode.