0025748: Parallel version of progress indicator
[occt.git] / src / CDF / CDF_Application.hxx
1 // Created on: 1997-08-07
2 // Created by: Jean-Louis Frenkel
3 // Copyright (c) 1997-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17 #ifndef _CDF_Application_HeaderFile
18 #define _CDF_Application_HeaderFile
19
20 #include <TCollection_ExtendedString.hxx>
21 #include <PCDM_ReaderStatus.hxx>
22 #include <CDF_TypeOfActivation.hxx>
23 #include <CDF_MetaDataDriver.hxx>
24 #include <CDM_Application.hxx>
25 #include <CDM_CanCloseStatus.hxx>
26 #include <TColStd_SequenceOfExtendedString.hxx>
27 #include <Standard_IStream.hxx>
28 #include <NCollection_IndexedDataMap.hxx>
29
30 class Standard_NoSuchObject;
31 class CDF_Session;
32 class Standard_GUID;
33 class CDM_Document;
34 class TCollection_ExtendedString;
35 class PCDM_Reader;
36 class CDM_MetaData;
37 class PCDM_RetrievalDriver;
38 class PCDM_StorageDriver;
39 class CDF_Directory;
40 class CDF_Application;
41 DEFINE_STANDARD_HANDLE(CDF_Application, CDM_Application)
42
43
44 class CDF_Application : public CDM_Application
45 {
46
47 public:
48
49   
50   //! plugs an application.
51   //!
52   //! Open is used
53   //! - for opening a Document that has been created in an application
54   //! - for opening a Document from the database
55   //! - for opening a Document from a file.
56   //! The Open methods always add the document in the session directory and
57   //! calls the virtual Activate method. The document is considered to be
58   //! opened until Close is used. To be storable, a document must be
59   //! opened by an application since the application resources are
60   //! needed to store it.
61   Standard_EXPORT static Handle(CDF_Application) Load (const Standard_GUID& aGUID);
62   
63   //! puts the document in the current session directory
64   //! and calls the virtual method Activate on it.
65   Standard_EXPORT void Open (const Handle(CDM_Document)& aDocument);
66   
67   Standard_EXPORT CDM_CanCloseStatus CanClose (const Handle(CDM_Document)& aDocument);
68   
69   //! removes the document of the current session directory
70   //! and closes the document;
71   Standard_EXPORT void Close (const Handle(CDM_Document)& aDocument);
72   
73   //! This method retrieves a document from the database.
74   //! If the Document references other documents which have
75   //! been updated, the latest version of these documents will
76   //! be used if {UseStorageConfiguration} is Standard_True.
77   //! The content of {aFolder}, {aName} and {aVersion} depends on
78   //! the Database Manager system. If the DBMS is only based on
79   //! the OS, {aFolder} is a directory and {aName} is the name of a
80   //! file. In this case the use of the syntax with {aVersion}
81   //! has no sense. For example:
82   //!
83   //! Handle(CDM_Document) theDocument=myApplication->Retrieve("/home/cascade","box.dsg");
84   //! If the DBMS is EUCLID/Design Manager, {aFolder}, {aName}
85   //! have the form they have in EUCLID/Design Manager. For example:
86   //!
87   //! Handle(CDM_Document) theDocument=myApplication->Retrieve("|user|cascade","box");
88   //!
89   //! Since  the version is not specified in  this syntax, the  latest wil be used.
90   //! A link is kept with the database through an instance of CDM_MetaData
91   Standard_EXPORT Handle(CDM_Document) Retrieve
92     (const TCollection_ExtendedString& aFolder,
93      const TCollection_ExtendedString& aName,
94      const Standard_Boolean UseStorageConfiguration = Standard_True,
95      const Message_ProgressRange& theRange = Message_ProgressRange());
96   
97   //! This method retrieves  a  document from the database.
98   //! If the  Document references other documents which have
99   //! been  updated, the  latest version of  these documents
100   //! will    be   used  if   {UseStorageConfiguration}  is
101   //! Standard_True.  --  If the DBMS is  only  based on the
102   //! OS, this syntax  should not be used.
103   //!
104   //! If the DBMS is EUCLID/Design Manager, {aFolder}, {aName}
105   //! and  {aVersion} have the form they have in
106   //! EUCLID/Design Manager. For example:
107   //!
108   //! Handle(CDM_Document) theDocument=myApplication->Retrieve("|user|cascade","box","2");
109   //! A link is kept with the database through an instance
110   //! of CDM_MetaData
111   Standard_EXPORT Handle(CDM_Document) Retrieve
112     (const TCollection_ExtendedString& aFolder, 
113      const TCollection_ExtendedString& aName, 
114      const TCollection_ExtendedString& aVersion, 
115      const Standard_Boolean UseStorageConfiguration = Standard_True,
116      const Message_ProgressRange& theRange = Message_ProgressRange());
117   
118   Standard_EXPORT PCDM_ReaderStatus CanRetrieve (const TCollection_ExtendedString& aFolder,
119                                                  const TCollection_ExtendedString& aName);
120   
121   Standard_EXPORT PCDM_ReaderStatus CanRetrieve (const TCollection_ExtendedString& aFolder,
122                                                  const TCollection_ExtendedString& aName,
123                                                  const TCollection_ExtendedString& aVersion);
124   
125   //! Checks  status  after  Retrieve
126   PCDM_ReaderStatus GetRetrieveStatus() const { return myRetrievableStatus; }
127   
128   //! Reads aDoc from standard SEEKABLE stream theIStream,
129   //! the stream should support SEEK fuctionality
130   Standard_EXPORT Handle(CDM_Document) Read
131     (Standard_IStream& theIStream,
132      const Message_ProgressRange& theRange = Message_ProgressRange());
133  
134   //! Returns instance of read driver for specified format.
135   //!
136   //! Default implementation uses plugin mechanism to load reader dynamically.
137   //! For this to work, application resources should define GUID of
138   //! the plugin as value of [Format].RetrievalPlugin, and "Plugin"
139   //! resource should define name of plugin library to be loaded as
140   //! value of [GUID].Location. Plugin library should provide
141   //! method PLUGINFACTORY returning instance of the reader for the
142   //! same GUID (see Plugin_Macro.hxx).
143   //!
144   //! In case if reader is not available, will raise Standard_NoSuchObject
145   //! or other exception if raised by plugin loader.
146   Standard_EXPORT virtual Handle(PCDM_Reader) ReaderFromFormat (const TCollection_ExtendedString& aFormat);
147   
148   //! Returns instance of storage driver for specified format.
149   //!
150   //! Default implementation uses plugin mechanism to load driver dynamically.
151   //! For this to work, application resources should define GUID of
152   //! the plugin as value of [Format].StoragePlugin, and "Plugin"
153   //! resource should define name of plugin library to be loaded as
154   //! value of [GUID].Location. Plugin library should provide
155   //! method PLUGINFACTORY returning instance of the reader for the
156   //! same GUID (see Plugin_Macro.hxx).
157   //!
158   //! In case if driver is not available, will raise Standard_NoSuchObject
159   //! or other exception if raised by plugin loader.
160   Standard_EXPORT virtual Handle(PCDM_StorageDriver) WriterFromFormat (const TCollection_ExtendedString& aFormat);
161   
162   //! try to  retrieve a Format  directly in the  file or in
163   //! application   resource  by using   extension. returns
164   //! True if found;
165   Standard_EXPORT Standard_Boolean Format (const TCollection_ExtendedString& aFileName,
166                                            TCollection_ExtendedString& theFormat);
167   
168   Standard_EXPORT Standard_ExtString DefaultFolder();
169   
170   Standard_EXPORT Standard_Boolean SetDefaultFolder (const Standard_ExtString aFolder);
171
172   //! returns MetaDatdDriver of this application
173   Standard_EXPORT Handle(CDF_MetaDataDriver) MetaDataDriver() const;
174
175 friend class CDF_Session;
176
177
178   DEFINE_STANDARD_RTTIEXT(CDF_Application,CDM_Application)
179
180   Handle(CDF_MetaDataDriver) myMetaDataDriver;
181   Handle(CDF_Directory) myDirectory;
182 private:
183
184   
185   //! Informs the  application that aDocument has  been
186   //! activated. A document is activated when it is created or
187   //! retrieved.
188   //! aTypeOfActivation will be:
189   //! - CDF_TOA_New if the document is a new one
190   //! (even empty or retrieved from the database for
191   //! the first time).
192   //! - CDF_TOA_Unchanged if the document was already
193   //! retrieved but had no changes since the previous retrieval.
194   //! - CDF_TOA_Modified if the document was already
195   //! retrieved and modified since the previous retrieval.
196   //! You do not need to call <Activate>, but you should  redefine
197   //! this method to implement application specific behavior.
198   Standard_EXPORT virtual void Activate (const Handle(CDM_Document)& aDocument,
199                                          const CDF_TypeOfActivation aTypeOfActivation);
200   
201   Standard_EXPORT Handle(CDM_Document) Retrieve
202     (const Handle(CDM_MetaData)& aMetaData, 
203      const Standard_Boolean UseStorageConfiguration, 
204      const Message_ProgressRange& theRange = Message_ProgressRange()) Standard_OVERRIDE;
205   
206   Standard_EXPORT Handle(CDM_Document) Retrieve
207     (const Handle(CDM_MetaData)& aMetaData,
208      const Standard_Boolean UseStorageConfiguration, 
209      const Standard_Boolean IsComponent, 
210      const Message_ProgressRange& theRange = Message_ProgressRange());
211   
212   Standard_EXPORT Standard_Integer DocumentVersion (const Handle(CDM_MetaData)& theMetaData) Standard_OVERRIDE;
213   
214   Standard_EXPORT CDF_TypeOfActivation TypeOfActivation (const Handle(CDM_MetaData)& aMetaData);
215   
216   Standard_EXPORT PCDM_ReaderStatus CanRetrieve (const Handle(CDM_MetaData)& aMetaData);
217
218 protected:
219
220   Standard_EXPORT CDF_Application();
221
222   PCDM_ReaderStatus myRetrievableStatus;
223   NCollection_IndexedDataMap<TCollection_ExtendedString, Handle(PCDM_RetrievalDriver)> myReaders;
224   NCollection_IndexedDataMap<TCollection_ExtendedString, Handle(PCDM_StorageDriver)> myWriters;
225
226 private:
227   TCollection_ExtendedString myDefaultFolder;
228 };
229
230 #endif // _CDF_Application_HeaderFile