--- /dev/null
+// Created on: 1997-07-30
+// Created by: Jean-Louis Frenkel
+// Copyright (c) 1997-1999 Matra Datavision
+// Copyright (c) 1999-2014 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _CDM_Document_HeaderFile
+#define _CDM_Document_HeaderFile
+
+#include <Standard.hxx>
+#include <Standard_Type.hxx>
+
+#include <TColStd_SequenceOfExtendedString.hxx>
+#include <TCollection_ExtendedString.hxx>
+#include <Standard_Boolean.hxx>
+#include <CDM_ListOfReferences.hxx>
+#include <Standard_Integer.hxx>
+#include <Standard_GUID.hxx>
+#include <Standard_Transient.hxx>
+#include <Standard_Address.hxx>
+#include <Standard_ExtString.hxx>
+#include <Standard_OStream.hxx>
+#include <CDM_CanCloseStatus.hxx>
+class CDM_MetaData;
+class CDM_Application;
+class Standard_NoSuchObject;
+class Standard_Failure;
+class Standard_DomainError;
+class CDM_Reference;
+class CDM_ReferenceIterator;
+class TCollection_ExtendedString;
+class Resource_Manager;
+class Standard_GUID;
+
+
+class CDM_Document;
+DEFINE_STANDARD_HANDLE(CDM_Document, Standard_Transient)
+
+//! An applicative document is an instance of a class inheriting CDM_Document.
+//! These documents have the following properties:
+//! - they can have references to other documents.
+//! - the modifications of a document are propagated to the referencing
+//! documents.
+//! - a document can be stored in different formats, with or
+//! without a persistent model.
+//! - the drivers for storing and retrieving documents are
+//! plugged in when necessary.
+//! - a document has a modification counter. This counter is
+//! incremented when the document is modified. When a document
+//! is stored, the current counter value is memorized as the
+//! last storage version of the document. A document is
+//! considered to be modified when the counter value is
+//! different from the storage version. Once the document is
+//! saved the storage version and the counter value are
+//! identical. The document is now not considered to be
+//! modified.
+//! - a reference is a link between two documents. A reference has two
+//! components: the "From Document" and the "To Document". When
+//! a reference is created, an identifier of the reference is generated.
+//! This identifier is unique in the scope of the From Document and
+//! is conserved during storage and retrieval. This means that the
+//! referenced document will be always accessible through this
+//! identifier.
+//! - a reference memorizes the counter value of the To Document when
+//! the reference is created. The From Document is considered to
+//! be up to date relative to the To Document when the
+//! reference counter value is equal to the To Document counter value.
+//! - retrieval of a document having references does not imply
+//! the retrieving of the referenced documents.
+class CDM_Document : public Standard_Transient
+{
+
+public:
+
+
+ //! The Update method will be called once for each
+ //! reference, but it should not perform any computation,
+ //! to avoid multiple computation of a same document.
+ Standard_EXPORT virtual void Update (const Handle(CDM_Document)& aToDocument, const Standard_Integer aReferenceIdentifier, const Standard_Address aModifContext);
+
+ //! This method Update will be called
+ //! to signal the end of the modified references list.
+ //! The document should be recomputed and
+ //! UpdateFromDocuments should be called. Update should
+ //! returns True in case of success, false otherwise. In
+ //! case of Failure, additional information can be given in
+ //! ErrorString.
+ Standard_EXPORT virtual Standard_Boolean Update (TCollection_ExtendedString& ErrorString);
+
+ //! The Storage Format is the key which is used to determine in the
+ //! application resources the storage driver plugin, the file
+ //! extension and other data used to store the document.
+ Standard_EXPORT virtual TCollection_ExtendedString StorageFormat() const = 0;
+
+ //! by default empties the extensions.
+ Standard_EXPORT virtual void Extensions (TColStd_SequenceOfExtendedString& Extensions) const;
+
+ //! This method can be redefined to extract another document in
+ //! a different format. For example, to extract a Shape
+ //! from an applicative document.
+ Standard_EXPORT virtual Standard_Boolean GetAlternativeDocument (const TCollection_ExtendedString& aFormat, Handle(CDM_Document)& anAlternativeDocument);
+
+ //! Creates a reference from this document to {anOtherDocument}.
+ //! Returns a reference identifier. This reference identifier
+ //! is unique in the document and will not be used for the
+ //! next references, even after the storing of the document.
+ //! If there is already a reference between the two documents,
+ //! the reference is not created, but its reference identifier
+ //! is returned.
+ Standard_EXPORT Standard_Integer CreateReference (const Handle(CDM_Document)& anOtherDocument);
+
+ //! Removes the reference between the From Document and the
+ //! To Document identified by a reference identifier.
+ Standard_EXPORT void RemoveReference (const Standard_Integer aReferenceIdentifier);
+
+ //! Removes all references having this document for From Document.
+ Standard_EXPORT void RemoveAllReferences();
+
+ //! Returns the To Document of the reference identified by
+ //! aReferenceIdentifier. If the ToDocument is stored and
+ //! has not yet been retrieved, this method will retrieve it.
+ Standard_EXPORT Handle(CDM_Document) Document (const Standard_Integer aReferenceIdentifier) const;
+
+ //! returns True if the To Document of the reference
+ //! identified by aReferenceIdentifier is in session, False
+ //! if it corresponds to a not yet retrieved document.
+ Standard_EXPORT Standard_Boolean IsInSession (const Standard_Integer aReferenceIdentifier) const;
+
+ //! returns True if the To Document of the reference
+ //! identified by aReferenceIdentifier has already been stored,
+ //! False otherwise.
+ Standard_EXPORT Standard_Boolean IsStored (const Standard_Integer aReferenceIdentifier) const;
+
+ //! returns the name of the metadata of the To Document of
+ //! the reference identified by aReferenceIdentifier.
+ Standard_EXPORT TCollection_ExtendedString Name (const Standard_Integer aReferenceIdentifier) const;
+
+ //! call virtual method Update on all referencing
+ //! documents. This method keeps the list of the --
+ //! documents to process.It may be the starting of an
+ //! update -- cycle. If not, the reentrant calls made by
+ //! Update method (without argument) will append the
+ //! referencing documents to the list and call the Update method
+ //! (with arguments). Only the first call to UpdateFromDocuments
+ //! generate call to Update().
+ Standard_EXPORT void UpdateFromDocuments (const Standard_Address aModifContext) const;
+
+ //! returns the number of references having this document as
+ //! From Document.
+ Standard_EXPORT Standard_Integer ToReferencesNumber() const;
+
+ //! returns the number of references having this document as
+ //! To Document.
+ Standard_EXPORT Standard_Integer FromReferencesNumber() const;
+
+ //! returns True is this document references aDocument;
+ Standard_EXPORT Standard_Boolean ShallowReferences (const Handle(CDM_Document)& aDocument) const;
+
+ //! returns True is this document references aDocument;
+ Standard_EXPORT Standard_Boolean DeepReferences (const Handle(CDM_Document)& aDocument) const;
+
+ //! Copies a reference to this document. This method
+ //! avoid retrieval of referenced document. The arguments
+ //! are the original document and a valid reference
+ //! identifier Returns the local identifier.
+ Standard_EXPORT Standard_Integer CopyReference (const Handle(CDM_Document)& aFromDocument, const Standard_Integer aReferenceIdentifier);
+
+ //! indicates that this document cannot be modified.
+ Standard_EXPORT Standard_Boolean IsReadOnly() const;
+
+ //! indicates that the referenced document cannot be modified,
+ Standard_EXPORT Standard_Boolean IsReadOnly (const Standard_Integer aReferenceIdentifier) const;
+
+ Standard_EXPORT void SetIsReadOnly();
+
+ Standard_EXPORT void UnsetIsReadOnly();
+
+ //! Indicates that this document has been modified.
+ //! This method increments the modification counter.
+ Standard_EXPORT void Modify();
+
+ //! returns the current modification counter.
+ Standard_EXPORT Standard_Integer Modifications() const;
+
+ Standard_EXPORT void UnModify();
+
+ //! returns true if the modification counter found in the given
+ //! reference is equal to the actual modification counter of
+ //! the To Document. This method is able to deal with a reference
+ //! to a not retrieved document.
+ Standard_EXPORT Standard_Boolean IsUpToDate (const Standard_Integer aReferenceIdentifier) const;
+
+ //! Resets the modification counter in the given reference
+ //! to the actual modification counter of its To Document.
+ //! This method should be called after the application has updated
+ //! this document.
+ Standard_EXPORT void SetIsUpToDate (const Standard_Integer aReferenceIdentifier);
+
+ //! associates a comment with this document.
+ Standard_EXPORT void SetComment (const TCollection_ExtendedString& aComment);
+
+ //! appends a comment into comments of this document.
+ Standard_EXPORT void AddComment (const TCollection_ExtendedString& aComment);
+
+ //! associates a comments with this document.
+ Standard_EXPORT void SetComments (const TColStd_SequenceOfExtendedString& aComments);
+
+ //! returns the associated comments through <aComments>.
+ //! Returns empty sequence if no comments are associated.
+ Standard_EXPORT void Comments (TColStd_SequenceOfExtendedString& aComments) const;
+
+ //! returns the first of associated comments. By defaut
+ //! the comment is an empty string.
+ Standard_EXPORT Standard_ExtString Comment() const;
+
+ //! Returns an alphanumeric string identifying this document
+ //! in a unique manner in the current process. The presentation
+ //! may change when the document is stored.
+ //! Tries to get the 'FileFormat`.Presentation resource
+ //! This item is used to give a default presentation
+ //! to the document.
+ Standard_EXPORT Standard_ExtString Presentation();
+
+ //! returns the document having the given alphanumeric presentation.
+ Standard_EXPORT static Handle(CDM_Document) FindFromPresentation (const TCollection_ExtendedString& aPresentation);
+
+ //! indicates whether a document having the given presentation
+ //! does exist.
+ Standard_EXPORT static Standard_Boolean FindPresentation (const TCollection_ExtendedString& aPresentation);
+
+ Standard_EXPORT Standard_Boolean IsStored() const;
+
+ //! returns the value of the modification counter at the
+ //! time of storage. By default returns 0.
+ Standard_EXPORT Standard_Integer StorageVersion() const;
+
+ //! associates database information to a document which
+ //! has been stored. The name of the document is now the
+ //! name which has beenused to store the data.
+ Standard_EXPORT void SetMetaData (const Handle(CDM_MetaData)& aMetaData);
+
+ Standard_EXPORT void UnsetIsStored();
+
+ Standard_EXPORT Handle(CDM_MetaData) MetaData() const;
+
+ Standard_EXPORT TCollection_ExtendedString Folder() const;
+
+ //! defines the folder in which the object should be stored.
+ Standard_EXPORT void SetRequestedFolder (const TCollection_ExtendedString& aFolder);
+
+ Standard_EXPORT TCollection_ExtendedString RequestedFolder() const;
+
+ Standard_EXPORT Standard_Boolean HasRequestedFolder() const;
+
+ //! defines the name under which the object should be stored.
+ Standard_EXPORT void SetRequestedName (const TCollection_ExtendedString& aName);
+
+ //! determines under which the document is going to be
+ //! store. By default the name of the document wil be --
+ //! used. If the document has no name its presentation
+ //! will be used.
+ Standard_EXPORT TCollection_ExtendedString RequestedName();
+
+ Standard_EXPORT void SetRequestedPreviousVersion (const TCollection_ExtendedString& aPreviousVersion);
+
+ Standard_EXPORT void UnsetRequestedPreviousVersion();
+
+ Standard_EXPORT Standard_Boolean HasRequestedPreviousVersion() const;
+
+ Standard_EXPORT TCollection_ExtendedString RequestedPreviousVersion() const;
+
+ //! defines the Comment with which the object should be stored.
+ Standard_EXPORT void SetRequestedComment (const TCollection_ExtendedString& aComment);
+
+ Standard_EXPORT TCollection_ExtendedString RequestedComment() const;
+
+ //! read (or rereads) the following resource.
+ Standard_EXPORT void LoadResources();
+
+ Standard_EXPORT Standard_Boolean FindFileExtension();
+
+ //! gets the Desktop.Domain.Application.`FileFormat`.FileExtension resource.
+ Standard_EXPORT TCollection_ExtendedString FileExtension();
+
+ Standard_EXPORT Standard_Boolean FindDataType();
+
+ //! this datatype will be used if the DBMS deals with this concept
+ //! gets the `FileFormat`.DataType resource.
+ //! concept.
+ Standard_EXPORT TCollection_ExtendedString DataType();
+
+ Standard_EXPORT Standard_Boolean FindVersionDataType();
+
+ //! this datatype will be used if the DBMS deals with this concept
+ //! gets the `FileFormat`.VersionDataType resource.
+ Standard_EXPORT TCollection_ExtendedString VersionDataType();
+
+ Standard_EXPORT Standard_Boolean FindDescription();
+
+ //! gets the `FileFormat`.Description resource.
+ Standard_EXPORT TCollection_ExtendedString Description();
+
+ Standard_EXPORT Standard_Boolean FindDomain();
+
+ //! gets the `FileFormat`.Domain resource.
+ Standard_EXPORT TCollection_ExtendedString Domain();
+
+ Standard_EXPORT Standard_Boolean FindStoragePlugin();
+
+ Standard_EXPORT Standard_GUID StoragePlugin();
+
+ //! returns true if the version is greater than the
+ //! storage version
+ Standard_EXPORT Standard_Boolean IsModified() const;
+
+ Standard_EXPORT Standard_OStream& Print (Standard_OStream& anOStream) const;
+Standard_OStream& operator << (Standard_OStream& anOStream);
+
+ Standard_EXPORT Standard_Boolean IsOpened() const;
+
+ Standard_EXPORT void Open (const Handle(CDM_Application)& anApplication);
+
+ Standard_EXPORT CDM_CanCloseStatus CanClose() const;
+
+ Standard_EXPORT void Close();
+
+ Standard_EXPORT const Handle(CDM_Application)& Application() const;
+
+ //! A referenced document may indicate through this
+ //! virtual method that it does not allow the closing of
+ //! aDocument which it references through the reference
+ //! aReferenceIdentifier. By default returns Standard_True;;
+ Standard_EXPORT virtual Standard_Boolean CanCloseReference (const Handle(CDM_Document)& aDocument, const Standard_Integer aReferenceIdentifier) const;
+
+ //! A referenced document may update its internal
+ //! data structure when {aDocument} which it references
+ //! through the reference {aReferenceIdentifier} is being closed.
+ //! By default this method does nothing.
+ Standard_EXPORT virtual void CloseReference (const Handle(CDM_Document)& aDocument, const Standard_Integer aReferenceIdentifier);
+
+ //! returns true if the document corresponding to the
+ //! given reference has been retrieved and opened.
+ //! Otherwise returns false. This method does not retrieve
+ //! the referenced document
+ Standard_EXPORT Standard_Boolean IsOpened (const Standard_Integer aReferenceIdentifier) const;
+
+ Standard_EXPORT void CreateReference (const Handle(CDM_MetaData)& aMetaData, const Standard_Integer aReferenceIdentifier, const Handle(CDM_Application)& anApplication, const Standard_Integer aToDocumentVersion, const Standard_Boolean UseStorageConfiguration);
+
+ Standard_EXPORT Standard_Integer CreateReference (const Handle(CDM_MetaData)& aMetaData, const Handle(CDM_Application)& anApplication, const Standard_Integer aDocumentVersion, const Standard_Boolean UseStorageConfiguration);
+
+ Standard_EXPORT Standard_Integer ReferenceCounter() const;
+
+ //! the following method should be used instead:
+ //!
+ //! Update(me:mutable; ErrorString: out ExtendedString from TCollection)
+ //! returns Boolean from Standard
+ Standard_EXPORT virtual void Update();
+
+friend class CDM_Reference;
+friend class CDM_ReferenceIterator;
+friend class CDM_Application;
+
+
+ DEFINE_STANDARD_RTTI(CDM_Document,Standard_Transient)
+
+protected:
+
+
+ Standard_EXPORT CDM_Document();
+
+ Standard_EXPORT virtual void Destroy();
+~CDM_Document()
+{
+ Destroy();
+}
+
+ Standard_Boolean myResourcesAreLoaded;
+
+
+private:
+
+
+ //! the manager returned by this method will be
+ //! used to search for the following resource items.
+ Standard_EXPORT Handle(Resource_Manager) StorageResource();
+
+ Standard_EXPORT Handle(CDM_Reference) Reference (const Standard_Integer aReferenceIdentifier) const;
+
+ Standard_EXPORT void ComputePresentation();
+
+ Standard_EXPORT void UnvalidPresentation();
+
+ Standard_EXPORT void AddToReference (const Handle(CDM_Reference)& aReference);
+
+ Standard_EXPORT void AddFromReference (const Handle(CDM_Reference)& aReference);
+
+ Standard_EXPORT void RemoveFromReference (const Standard_Integer aReferenceIdentifier);
+
+ Standard_EXPORT void SetModifications (const Standard_Integer Modifications);
+
+ Standard_EXPORT void SetReferenceCounter (const Standard_Integer aReferenceCounter);
+
+ TColStd_SequenceOfExtendedString myComments;
+ TCollection_ExtendedString myPresentation;
+ Standard_Boolean myValidPresentation;
+ CDM_ListOfReferences myFromReferences;
+ CDM_ListOfReferences myToReferences;
+ Standard_Integer myVersion;
+ Standard_Integer myActualReferenceIdentifier;
+ Standard_Integer myStorageVersion;
+ Handle(CDM_MetaData) myMetaData;
+ TCollection_ExtendedString myRequestedComment;
+ TCollection_ExtendedString myRequestedFolder;
+ Standard_Boolean myRequestedFolderIsDefined;
+ TCollection_ExtendedString myRequestedName;
+ Standard_Boolean myRequestedNameIsDefined;
+ Standard_Boolean myRequestedPreviousVersionIsDefined;
+ TCollection_ExtendedString myRequestedPreviousVersion;
+ TCollection_ExtendedString myFileExtension;
+ TCollection_ExtendedString myDataType;
+ TCollection_ExtendedString myVersionDataType;
+ TCollection_ExtendedString myDescription;
+ TCollection_ExtendedString myDomain;
+ TCollection_ExtendedString myDefaultPresentation;
+ Standard_Boolean myFileExtensionWasFound;
+ Standard_Boolean myDataTypeWasFound;
+ Standard_Boolean myVersionDataTypeWasFound;
+ Standard_Boolean myDescriptionWasFound;
+ Standard_Boolean myDomainWasFound;
+ Standard_Boolean myStoragePluginWasFound;
+ Standard_Boolean myDefaultPresentationWasFound;
+ Standard_GUID myStoragePlugin;
+ Handle(CDM_Application) myApplication;
+
+
+};
+
+
+
+
+
+
+
+#endif // _CDM_Document_HeaderFile