/* * Copyright 2006 Sony Computer Entertainment Inc. * * Licensed under the MIT Open Source License, for details please see license.txt or the website * http://www.opensource.org/licenses/mit-license.php * */ #ifndef __DAE_DOCUMENT__ #define __DAE_DOCUMENT__ #include #include #include #include class DAE; class daeDatabase; /** * The @c daeDocument class implements a COLLADA runtime database entry. */ class DLLSPEC daeDocument { public: /** * Constructor * @param dae The dae that owns this document. * @param zaeRootDocument Indicates if the new document is the root document of a ZAE archive. * @param extractedFileURI URI to extracted dae file. */ daeDocument(DAE& dae, bool zaeRootDocument = false, const std::string& extractedFileURI = ""); /** * Destructor */ ~daeDocument(); /** * Accessor to get the @c domCollada associated with this document. * @return A @c daeElementRef for the @c domCollada that is the root of this document. * @note This function should really return a domColladaRef, * but we're trying to avoid having @c dae classes depend on generated dom classes. */ daeElement* getDomRoot() const {return(dom);} /** * Accessor to set the domCollada associated with this document * @param domRoot the domCollada that is the root of this document * @remarks Should really require a domColladaRef but we're trying to avoid having dae classes depend on generated dom classes. */ void setDomRoot(daeElement* domRoot) {dom = domRoot; domRoot->setDocument(this); } /** * Accessor to get the URI associated with the document in this document; * this is currently set to the URI from which the document was loaded, but * is blank if the document was created with @c insertDocument(). * @return Returns a pointer to the URI for this document. * @note This is the full URI of the document and not the document base URI. */ daeURI* getDocumentURI() {return (&uri);} /** * Const accessor to get the URI associated with the document in this collection; * this is currently set to the URI from which the collection was loaded, but * is blank if the collection was created with @c insertCollection(). * @return Returns a pointer to the URI for this collection. * @note This is the full URI of the document and not the document base URI. */ const daeURI* getDocumentURI() const {return (&uri);} /** * Accessor to get the DAE that owns this document. * @return Returns the DAE that owns this document. */ DAE* getDAE(); /** * Accessor to get the database associated with this document. * @return Returns the database associated with this document. */ daeDatabase* getDatabase(); /** * This function is used to track how a document gets modified. It gets called internally. * @param element The element that was added to this document. * @note This function is called internally and not meant to be called by the client application. * Calling this function from the client application may result in unexpected behavior. */ void insertElement( daeElementRef element ); /** * This function is used to track how a document gets modified. It gets called internally. * @param element The element that was removed from this document. * @note This function is called internally and not meant to be called by the client application. * Calling this function from the client application may result in unexpected behavior. */ void removeElement( daeElementRef element ); /** * This function is used to track how a document gets modified. It gets called internally. * @param element The element whose ID is about to be changed. * @param newID The ID that is going to be assigned to the element. * @note This function is called internally and not meant to be called by the client application. * Calling this function from the client application may result in unexpected behavior. */ void changeElementID( daeElementRef element, daeString newID ); /** * This function is just like changeElementID, except it keeps track of sids instead of IDs. * @param element The element whose sid is about to be changed. * @param newSID The sid that is going to be assigned to the element. * @note This function is called internally and not meant to be called by the client application. * Calling this function from the client application may result in unexpected behavior. */ void changeElementSID( daeElementRef element, daeString newSID ); /** * Returns true if this document is the root of a ZAE archive. * In that case getExtractedFileURI() can be used to parse * this document and for URI resolving. * @note This function is called internally and not meant to be called by the client application. */ bool isZAERootDocument() {return mZAERootDocument;} /** * If this document is the root of a ZAE archive, this method can be used * to get the extracted file. Return value is only valid if isZAERootDocument() * returns true. * @note This function is called internally and not meant to be called by the client application. */ const daeURI& getExtractedFileURI() {return mExtractedFileURI;} private: /** * The DAE that owns this document. The DAE's database is notified by the document when * elements are inserted, removed, or have their ID changed. */ DAE* dae; /** * Top Level element for of the document, always a domCollada * @remarks This member will eventually be taken private, use getDomRoot() to access it. */ daeElementRef dom; /** * The URI of the document, may be blank if the document wasn't loaded from a URI * @remarks This member will eventually be taken private, use getDocumentURI() to access it. */ daeURI uri; /** * Indicates if this document is the root of a ZAE archive. */ bool mZAERootDocument; /** * URI pointing to the extracted root DAE if mZAERootDocument is true. * Otherwise it is not valid. */ daeURI mExtractedFileURI; }; typedef daeDocument daeCollection; #endif