]> SALOME platform Git repositories - modules/yacs.git/blob - src/engine/VisitorSaveSchema.hxx
Salome HOME
copy tag mergefrom_BR_V0_1_CC_Salome_04oct07
[modules/yacs.git] / src / engine / VisitorSaveSchema.hxx
1 #ifndef __VISITOR_SAVESCHEMA_HXX__
2 #define __VISITOR_SAVESCHEMA_HXX__
3
4 #include "Visitor.hxx"
5 #include "Exception.hxx"
6
7 #include <fstream>
8 #include <string>
9 #include <map>
10 #include <set>
11
12 namespace YACS
13 {
14   namespace ENGINE
15   {
16     class OutputPort;
17     class OutputDataStreamPort;
18     class InPort;
19     class ComponentInstance;
20
21     struct DataLinkInfo
22     {
23       Node* from;
24       Node* to;
25       OutputPort* outp;
26       InPort* inp;
27       bool toDelete;
28     };
29
30     struct StreamLinkInfo
31     {
32       Node* from;
33       Node* to;
34       OutputDataStreamPort* outp;
35       InPort* inp;
36       bool toDelete;
37     };
38
39     class VisitorSaveSchema: public Visitor
40     {
41     public:
42       VisitorSaveSchema(ComposedNode *root);
43       virtual ~VisitorSaveSchema();
44       void openFileSchema(std::string xmlDump) throw(Exception);
45       void closeFileSchema();
46       virtual void visitBloc(Bloc *node);
47       virtual void visitElementaryNode(ElementaryNode *node);
48       virtual void visitForEachLoop(ForEachLoop *node);
49       virtual void visitForLoop(ForLoop *node);
50       virtual void visitInlineNode(InlineNode *node);
51       virtual void visitInlineFuncNode(InlineFuncNode *node);
52       virtual void visitLoop(Loop *node);
53       virtual void visitProc(Proc *node);
54       virtual void visitServiceNode(ServiceNode *node);
55       virtual void visitServiceInlineNode(ServiceInlineNode *node);
56       virtual void visitSwitch(Switch *node);
57       virtual void visitWhileLoop(WhileLoop *node);
58
59     protected:
60       virtual void writeProperties(Node *node);
61       virtual void writeTypeCodes(Proc *proc);
62       virtual void writeContainers(Proc *proc);
63       virtual void writeInputPorts(Node *node);
64       virtual void writeInputDataStreamPorts(Node *node); // OCC : mkr : add possibility to write input data stream ports
65       virtual void writeOutputPorts(Node *node);
66       virtual void writeOutputDataStreamPorts(Node *node); // OCC : mkr : add possibility to write output data stream ports
67       virtual void writeControls(ComposedNode *node);
68       virtual void writeSimpleDataLinks(ComposedNode *node);
69       virtual void writeSimpleStreamLinks(ComposedNode *node); // OCC : mkr : add possibility to write stream links
70       virtual void writeParameters(Proc *proc);
71       virtual void writeParametersNode(ComposedNode *proc, Node *node);
72       virtual void beginCase(Node* node);
73       virtual void endCase(Node* node);
74       std::set<Node*> getAllNodes(ComposedNode *node);
75       int depthNode(Node* node);
76       inline std::string indent(int val)
77       {std::string white; white.append(3*val,' '); return white;};
78
79       std::ofstream _out;
80       std::map<int, std::string> _nodeStateName;
81       std::map<std::string, Container*> _containerMap;
82       std::map<ComponentInstance*, std::string> _componentInstanceMap;
83       ComposedNode *_root;
84       std::multimap<int, DataLinkInfo> _mapOfDLtoCreate;
85       std::multimap<int, StreamLinkInfo> _mapOfSLtoCreate;
86     };
87
88     class SchemaSave
89     {
90     public:
91       SchemaSave(Proc* proc);
92       virtual void save(std::string xmlSchemaFile);
93     protected:
94       Proc* _p;
95     };
96   }
97 }
98 #endif